Link with MSVCRT.dll (release, multithreaded), passing file pointer across
different M$VC runtime will crash.
I believe that patching 2.5.1 for win32 is more or less the same as patching
2.0.1 (though I haven't really tried), may be this's useful:
http://gladewin32.sf.net
----- Original Message -----
From: "todd" <taf2 lehigh edu>
Cc: <glade-devel ximian com>
Sent: Monday, April 12, 2004 09:36
Subject: [Glade-devel] win32 patch for glade-2.5.1 cvs
Hi,
I've recently spent some getting gtk+ 2.4 working win32 for me. The
one last thing I'd like to get working is glade. Everything for me is
working
except for the save functionality. Attached is the set of patches I
made to the source to get the properties dialog box to open as well as a
fix for a invalid
write for both linux and win32 that I found using valgrind.
On my build save is crashing in save.c in the function
save_project_file_internal when it hits the fprintf, which for me is on
line 179.
I was hoping to get some feed back on some ideas about why it might be
crashing on the fprintf, because if i replace the fprintf with an fwrite
the call works and the file I can see is written to just fine. It feels
like some how the call stack is getting corrupted. In my patch there is
a fix
for a win32 #define that sets a pointer to memory on the stack and then
in other platforms allocates memory for the pointer on the stack but for
all platforms frees that memory. So, i'm worried that the call stack
might be getting corrupted because of other areas that are like this.
The other related bug fix for the file open dialog box is a fix in glib,
which i reported here in bugzilla:
http://bugzilla.gnome.org/show_bug.cgi?id=139423
I'd really like to get glade 2.5.x working in win32, and think that I'm
really close with this patch but would like some more help in figuring
out why the save
function is dieing on fprintf. I hope this patch can be helpful
-todd
----------------------------------------------------------------------------
----
? fogb.h
? fogbframe.c
? foogbwindow.c
? mypatches.patch
? win32fix.patch
Index: glade/glade_menu_editor.c
===================================================================
RCS file: /cvs/gnome/glade/glade/glade_menu_editor.c,v
retrieving revision 1.22
diff -u -r1.22 glade_menu_editor.c
--- glade/glade_menu_editor.c 5 Apr 2004 23:18:08 -0000 1.22
+++ glade/glade_menu_editor.c 12 Apr 2004 01:23:04 -0000
@@ -25,6 +25,7 @@
#include <string.h>
#include <time.h>
+#include <gtk/gtkmain.h>
#include <gdk/gdkkeysyms.h>
#include <gtk/gtkarrow.h>
#include <gtk/gtkaccellabel.h>
Index: glade/glade_project_options.c
===================================================================
RCS file: /cvs/gnome/glade/glade/glade_project_options.c,v
retrieving revision 1.24
diff -u -r1.24 glade_project_options.c
--- glade/glade_project_options.c 5 Apr 2004 23:18:08 -0000 1.24
+++ glade/glade_project_options.c 12 Apr 2004 01:23:04 -0000
@@ -19,6 +19,7 @@
#include <ctype.h>
#include <string.h>
+#include <gtk/gtkmain.h>
#include <gtk/gtkalignment.h>
#include <gtk/gtkentry.h>
#include <gtk/gtkeventbox.h>
Index: glade/glade_project_window.c
===================================================================
RCS file: /cvs/gnome/glade/glade/glade_project_window.c,v
retrieving revision 1.27
diff -u -r1.27 glade_project_window.c
--- glade/glade_project_window.c 23 Mar 2004 17:41:29 -0000 1.27
+++ glade/glade_project_window.c 12 Apr 2004 01:23:06 -0000
@@ -1408,7 +1408,7 @@
glade_project_window_update_title (project_window);
glade_project_window_setup_interface (project_window);
- gtk_widget_destroy (GTK_WIDGET (options));
+ gtk_widget_hide (GTK_WIDGET (options));
switch (action)
{
@@ -1424,6 +1424,7 @@
glade_project_window_real_write_source (project_window);
break;
}
+ gtk_widget_destroy (GTK_WIDGET (options));
}
Index: glade/main.c
===================================================================
RCS file: /cvs/gnome/glade/glade/main.c,v
retrieving revision 1.15
diff -u -r1.15 main.c
--- glade/main.c 25 Mar 2004 14:57:21 -0000 1.15
+++ glade/main.c 12 Apr 2004 01:23:06 -0000
@@ -23,7 +23,9 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef G_OS_UNIX
#include <unistd.h>
+#endif
#include <gtk/gtkmain.h>
#include <gtk/gtkrc.h>
@@ -105,7 +107,7 @@
int
main (int argc, char *argv[])
{
- gchar *home_dir, *rc_path, *modules, *modules_needed, *new_modules;
+ gchar *home_dir = 0, *rc_path = 0, *modules = 0, *modules_needed = 0,
*new_modules = 0;
#ifdef USE_GNOME
GnomeProgram *program;
char *icon;
@@ -195,6 +197,8 @@
#else
gtk_main ();
#endif
+
+ g_free( new_modules );
return 0;
}
Index: glade/property.c
===================================================================
RCS file: /cvs/gnome/glade/glade/property.c,v
retrieving revision 1.35
diff -u -r1.35 property.c
--- glade/property.c 23 Mar 2004 17:41:30 -0000 1.35
+++ glade/property.c 12 Apr 2004 01:23:09 -0000
@@ -988,59 +988,63 @@
lang_specific_properties[i] = NULL;
/* Create table for C-specific properties. */
- table = gtk_table_new (3, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 1);
- if (property_language == GLADE_LANGUAGE_C)
- gtk_widget_show (table);
- lang_specific_properties[GLADE_LANGUAGE_C] = table;
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
-
- property_set_table_position (table, 0);
- property_add_filename (GbCSourceFile, _("Source File:"),
- _("The file to write source code into"));
- property_add_bool (GbCPublic, _("Public:"),
- _("If the widget is added to the component's data structure"));
-
- /* Create table for C++-specific properties. */
- table = gtk_table_new (3, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 1);
- if (property_language == GLADE_LANGUAGE_CPP)
- gtk_widget_show (table);
- lang_specific_properties[GLADE_LANGUAGE_CPP] = table;
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
-
- property_set_table_position (table, 0);
- property_add_bool (GbCxxSeparateClass, _("Separate Class:"),
- _("Put this widget's subtree in a separate class"));
- property_add_bool (GbCxxSeparateFile, _("Separate File:"),
- _("Put this widget in a separate source file"));
- property_add_choice (GbCxxVisibility, _("Visibility:"),
- _("Visibility of widgets. Public widgets are exported to a global
map."),
- GbCxxVisibilityChoices);
-
- /* Create table for Ada95-specific properties. */
- table = gtk_table_new (3, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 1);
- if (property_language == GLADE_LANGUAGE_ADA95)
- gtk_widget_show (table);
- lang_specific_properties[GLADE_LANGUAGE_ADA95] = table;
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
-
- property_set_table_position (table, 0);
- /* No properties yet. */
-
-
- /* Create table for Perl-specific properties. */
- table = gtk_table_new (3, 3, FALSE);
- gtk_table_set_row_spacings (GTK_TABLE (table), 1);
- if (property_language == GLADE_LANGUAGE_PERL)
- gtk_widget_show (table);
- lang_specific_properties[GLADE_LANGUAGE_PERL] = table;
- gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
-
- property_set_table_position (table, 0);
- /* No properties yet. */
-
+ if( GLADE_LANGUAGE_C < GladeNumLanguages ){
+ table = gtk_table_new (3, 3, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 1);
+ if (property_language == GLADE_LANGUAGE_C)
+ gtk_widget_show (table);
+ lang_specific_properties[GLADE_LANGUAGE_C] = table;
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+
+ property_set_table_position (table, 0);
+ property_add_filename (GbCSourceFile, _("Source File:"),
+ _("The file to write source code into"));
+ property_add_bool (GbCPublic, _("Public:"),
+ _("If the widget is added to the component's data structure"));
+ }
+ if( GLADE_LANGUAGE_CPP < GladeNumLanguages ){
+ /* Create table for C++-specific properties. */
+ table = gtk_table_new (3, 3, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 1);
+ if (property_language == GLADE_LANGUAGE_CPP)
+ gtk_widget_show (table);
+ lang_specific_properties[GLADE_LANGUAGE_CPP] = table;
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+
+ property_set_table_position (table, 0);
+ property_add_bool (GbCxxSeparateClass, _("Separate Class:"),
+ _("Put this widget's subtree in a separate class"));
+ property_add_bool (GbCxxSeparateFile, _("Separate File:"),
+ _("Put this widget in a separate source file"));
+ property_add_choice (GbCxxVisibility, _("Visibility:"),
+ _("Visibility of widgets. Public widgets are exported to a global
map."),
+ GbCxxVisibilityChoices);
+ }
+ if( GLADE_LANGUAGE_ADA95 < GladeNumLanguages ){
+ /* Create table for Ada95-specific properties. */
+ table = gtk_table_new (3, 3, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 1);
+ if (property_language == GLADE_LANGUAGE_ADA95)
+ gtk_widget_show (table);
+ lang_specific_properties[GLADE_LANGUAGE_ADA95] = table;
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+
+ property_set_table_position (table, 0);
+ /* No properties yet. */
+
+ }
+ if( GLADE_LANGUAGE_PERL < GladeNumLanguages ){
+ /* Create table for Perl-specific properties. */
+ table = gtk_table_new (3, 3, FALSE);
+ gtk_table_set_row_spacings (GTK_TABLE (table), 1);
+ if (property_language == GLADE_LANGUAGE_PERL)
+ gtk_widget_show (table);
+ lang_specific_properties[GLADE_LANGUAGE_PERL] = table;
+ gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);
+
+ property_set_table_position (table, 0);
+ /* No properties yet. */
+ }
}
Index: glade/utils.c
===================================================================
RCS file: /cvs/gnome/glade/glade/utils.c,v
retrieving revision 1.30
diff -u -r1.30 utils.c
--- glade/utils.c 23 Mar 2004 17:41:30 -0000 1.30
+++ glade/utils.c 12 Apr 2004 01:23:11 -0000
@@ -21,7 +21,9 @@
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef G_OS_UNIX
#include <unistd.h>
+#endif
#include <dirent.h>
#include <errno.h>
@@ -1331,7 +1333,10 @@
if (dir_pos > root_pos)
dir_pos++;
len = dir_pos + 1 + (strlen (file) - file_pos) + 1;
- path = g_malloc (len);
+ path = g_try_malloc (len);
+ if( path == NULL ){
+ return NULL;
+ }
strncpy (path, dir, dir_pos);
path[dir_pos] = G_DIR_SEPARATOR;
strcpy (path + dir_pos + 1, file + file_pos);
@@ -1602,11 +1607,13 @@
gint project_num, max_project_num, project_string_len;
gint num_matched, chars_matched;
-#ifdef _WIN32
- projects_dir = "C:\\Projects";
-#else
+
projects_dir = glade_util_make_absolute_path (g_get_home_dir (),
_("Projects"));
+#ifdef _WIN32
+ if( projects_dir == NULL ){
+ projects_dir = g_strdup( "C:\\Projects" );
+ }
#endif
/* Step through the 'Projects' directory, if it exists, to find
_______________________________________________
Glade-devel maillist - Glade-devel lists ximian com
http://lists.ximian.com/mailman/listinfo/glade-devel