On Thu, 2006-03-16 at 02:13 -0500, Tristan Van Berkom wrote:
> Well I didnt get to look at your patch (actually I lost the link from 
> irc :-o )
> 
> but I managed to fix the dialog load/save bug along with the 
> get_children/get_all_children
> madness... try it out ;-)

Great!!!


PD: this is the changelog for catalog_init_function.patch

2006-03-16  Juan Pablo Ugarte <[EMAIL PROTECTED]>

        * src/glade-catalog.c: Added GladeCatalogInitFunc so you could define a 
function 
          to be executed before instantiating any catalog's object.

        * src/glade-project-view.c: glade_project_view_populate_model now shows 
toplevels 
          in the right order.

        * src/glade-property.c: fixed a bug in glade_property_write_impl which 
prevented
          properties with an empty string as value being saved.

        * src/glade-utils.[c/h]: new function glade_util_load_library() moved 
from 
          glade_widget_class_load_library()

        * src/glade-widget-class.c: glade_widget_class_load_library() replaced 
with
          glade_util_load_library()

        * src/glade.h: added tag GLADE_TAG_INIT_FUNCTION.


Index: src/glade-editor-property.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-editor-property.c,v
retrieving revision 1.20
diff -u -p -r1.20 glade-editor-property.c
--- src/glade-editor-property.c	16 Mar 2006 06:59:01 -0000	1.20
+++ src/glade-editor-property.c	16 Mar 2006 20:51:17 -0000
@@ -2322,6 +2322,162 @@ glade_eprop_objects_create_input (GladeE
 
 
 /*******************************************************************************
+                        GladeEditorPropertyAdjustmentClass
+ *******************************************************************************/
+typedef struct {
+	GladeEditorProperty parent_instance;
+
+	GtkWidget *value, *lower, *upper, *step_increment, *page_increment, *page_size;
+} GladeEPropAdjustment;
+
+GLADE_MAKE_EPROP (GladeEPropAdjustment, glade_eprop_adjustment)
+#define GLADE_TYPE_EPROP_ADJUSTMENT          (glade_eprop_adjustment_get_type())
+#define GLADE_EPROP_ADJUSTMENT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GLADE_TYPE_EPROP_ADJUSTMENT, GladeEPropAdjustment))
+#define GLADE_EPROP_ADJUSTMENT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GLADE_TYPE_EPROP_ADJUSTMENT, GladeEPropAdjustmentClass))
+#define GLADE_IS_EPROP_ADJUSTMENT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GLADE_TYPE_EPROP_ADJUSTMENT))
+#define GLADE_IS_EPROP_ADJUSTMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GLADE_TYPE_EPROP_ADJUSTMENT))
+#define GLADE_EPROP_ADJUSTMENT_GET_CLASS(o)    (G_TYPE_INSTANCE_GET_CLASS ((o), GLADE_EPROP_ADJUSTMENT, GladeEPropAdjustmentClass))
+
+static void
+glade_eprop_adjustment_finalize (GObject *object)
+{
+	/* Chain up */
+	G_OBJECT_CLASS (editor_property_class)->finalize (object);
+}
+
+static void
+glade_eprop_adjustment_load (GladeEditorProperty *eprop, GladeProperty *property)
+{
+	GladeEPropAdjustment *eprop_adj = GLADE_EPROP_ADJUSTMENT (eprop);
+	GObject *object;
+	GtkAdjustment *adj;
+	
+	/* Chain up first */
+	editor_property_class->load (eprop, property);
+
+	if (property == NULL) return;
+	printf ("glade_eprop_adjustment_load\n");
+	object = g_value_get_object (property->value);
+	if (object)
+	{
+		adj = GTK_ADJUSTMENT (object);
+	}
+	else
+	{/*
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->value), 0);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->lower), 0);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->upper), 0);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->step_increment), 0);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->page_increment), 0);
+		gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->page_size), 0);		
+		*/
+		return;
+	}
+	printf ("\t %lf %lf %lf %lf %lf %lf\n", adj->value, adj->lower, adj->upper, adj->step_increment, adj->page_increment, adj->page_size);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->value), adj->value);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->lower), adj->lower);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->upper), adj->upper);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->step_increment), adj->step_increment);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->page_increment), adj->page_increment);
+	gtk_spin_button_set_value (GTK_SPIN_BUTTON (eprop_adj->page_size), adj->page_size);
+}
+
+static void
+glade_eprop_adjustment_property_changed_common (GladeEditorProperty *eprop, 
+						GtkAdjustment *adj)
+{
+	GValue value = {0, };
+	GtkObject *new_adj;
+	
+	new_adj = gtk_adjustment_new (adj->value,
+				      adj->lower,
+				      adj->upper,
+				      adj->step_increment,
+				      adj->page_increment,
+				      adj->page_size);
+	
+	g_value_init (&value, GTK_TYPE_ADJUSTMENT);
+	
+	g_value_set_object (&value, G_OBJECT (new_adj));
+	printf ("glade_eprop_adjustment_property_changed_common\n");
+	printf ("\t %lf %lf %lf %lf %lf %lf\n", adj->value, adj->lower, adj->upper, adj->step_increment, adj->page_increment, adj->page_size);
+	glade_editor_property_commit (eprop, &value);
+
+	g_value_unset (&value);
+}
+
+#define GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC(p)		\
+static void								\
+glade_eprop_adjustment_ ## p ## _changed (GtkSpinButton *spinbutton,	\
+					  GladeEditorProperty *eprop)	\
+{									\
+	GObject *object;						\
+	GtkAdjustment *adj;						\
+									\
+	object = g_value_get_object (eprop->property->value);		\
+	if (object == NULL) return;					\
+	adj = GTK_ADJUSTMENT (object);					\
+	printf ("glade_eprop_adjustment_" #p "_changed %lf %lf\n", adj->p, gtk_spin_button_get_value (spinbutton));		\
+	if (adj->p == gtk_spin_button_get_value (spinbutton)) return;	\
+	adj->p = gtk_spin_button_get_value (spinbutton);		\
+	glade_eprop_adjustment_property_changed_common (eprop, adj);	\
+}
+
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (value)
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (lower)
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (upper)
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (step_increment)
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (page_increment)
+GLADE_EPROP_ADJUSTMENT_DEFINE_VALUE_CHANGED_FUNC (page_size)
+
+#define GLADE_EPROP_ADJUSTMENT_CONNECT(object, prop) \
+g_signal_connect (object, "value_changed", \
+G_CALLBACK (glade_eprop_adjustment_ ## prop ## _changed), eprop);
+
+static GtkWidget *
+glade_eprop_adjustment_create_input (GladeEditorProperty *eprop)
+{
+	GladeEPropAdjustment *eprop_adj = GLADE_EPROP_ADJUSTMENT (eprop);
+	GtkWidget *vbox;
+
+	vbox = gtk_vbox_new (FALSE, 0);
+	
+	eprop_adj->value = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->value), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->value, value);
+	
+	eprop_adj->lower = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->lower), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->lower, lower);
+	
+	eprop_adj->upper = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->upper), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->upper, upper);
+	
+	eprop_adj->step_increment = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->step_increment), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->step_increment, step_increment);
+	
+	eprop_adj->page_increment = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->page_increment), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->page_increment, page_increment);
+
+	eprop_adj->page_size = gtk_spin_button_new_with_range (0, G_MAXDOUBLE, 1);
+	gtk_spin_button_set_digits (GTK_SPIN_BUTTON (eprop_adj->page_size), 2);
+	GLADE_EPROP_ADJUSTMENT_CONNECT (eprop_adj->page_size, page_size);
+	
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->value, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->lower, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->upper, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->step_increment, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->page_increment, FALSE, FALSE, 0);
+	gtk_box_pack_start (GTK_BOX (vbox), eprop_adj->page_size, FALSE, FALSE, 0);
+
+	return vbox;
+}
+
+
+/*******************************************************************************
                               Misc static stuff
  *******************************************************************************/
 static GType 
@@ -2360,7 +2516,10 @@ glade_editor_property_type (GParamSpec *
 	{
 		if (pspec->value_type == GDK_TYPE_PIXBUF)
 			type = GLADE_TYPE_EPROP_RESOURCE;
-		else 
+		else
+		if (pspec->value_type == GTK_TYPE_ADJUSTMENT)
+			type = GLADE_TYPE_EPROP_ADJUSTMENT;
+		else
 			type = GLADE_TYPE_EPROP_OBJECT;
 	}
 	else if (GLADE_IS_PARAM_SPEC_OBJECTS(pspec))
Index: src/glade-gtk.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-gtk.c,v
retrieving revision 1.106
diff -u -p -r1.106 glade-gtk.c
--- src/glade-gtk.c	16 Mar 2006 06:59:01 -0000	1.106
+++ src/glade-gtk.c	16 Mar 2006 20:51:23 -0000
@@ -154,59 +154,20 @@ glade_gtk_progress_bar_set_format (GObje
 	gtk_progress_set_format_string (GTK_PROGRESS (bar), format);
 }
 
-void GLADEGTK_API
-glade_gtk_spin_button_set_max (GObject *object, GValue *value)
-{
-	GtkAdjustment *adjustment;
-
-	adjustment = GTK_ADJUSTMENT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)));
-
-	adjustment->upper = g_value_get_float (value);
-	gtk_adjustment_changed (adjustment);
-}
+/* GtkSpinButton */
 
 void GLADEGTK_API
-glade_gtk_spin_button_set_min (GObject *object, GValue *value)
+glade_gtk_spin_button_set_adjustment (GObject *object, GValue *value)
 {
-	GtkAdjustment *adjustment;
-
-	adjustment = GTK_ADJUSTMENT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)));
-
-	adjustment->lower = g_value_get_float (value);
-	gtk_adjustment_changed (adjustment);
-}
-
-void GLADEGTK_API
-glade_gtk_spin_button_set_step_increment (GObject *object, GValue *value)
-{
-	GtkAdjustment *adjustment;
-
-	adjustment = GTK_ADJUSTMENT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)));
-
-	adjustment->step_increment = g_value_get_float (value);
-	gtk_adjustment_changed (adjustment);
-}
-
-void GLADEGTK_API
-glade_gtk_spin_button_set_page_increment (GObject *object, GValue *value)
-{
-	GtkAdjustment *adjustment;
-
-	adjustment = GTK_ADJUSTMENT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)));
-
-	adjustment->page_increment = g_value_get_float (value);
-	gtk_adjustment_changed (adjustment);
-}
-
-void GLADEGTK_API
-glade_gtk_spin_button_set_page_size (GObject *object, GValue *value)
-{
-	GtkAdjustment *adjustment;
-
-	adjustment = GTK_ADJUSTMENT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (object)));
-
-	adjustment->page_size = g_value_get_float (value);
-	gtk_adjustment_changed (adjustment);
+	GObject *adjustment;
+	
+	g_return_if_fail (GTK_IS_SPIN_BUTTON (object));
+		
+	adjustment = g_value_get_object (value);
+	
+	if (adjustment)
+		gtk_spin_button_set_adjustment (GTK_SPIN_BUTTON (object),
+						GTK_ADJUSTMENT (adjustment));
 }
 
 /* GtkBox */
Index: src/glade-property-class.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-property-class.c,v
retrieving revision 1.94
diff -u -p -r1.94 glade-property-class.c
--- src/glade-property-class.c	14 Mar 2006 14:58:30 -0000	1.94
+++ src/glade-property-class.c	16 Mar 2006 20:51:27 -0000
@@ -287,6 +287,15 @@ glade_property_class_make_string_from_ob
 		if ((filename = g_object_get_data (object, "GladeFileName")) != NULL)
 			string = g_path_get_basename (filename);
 	}
+	else if (property_class->pspec->value_type == GTK_TYPE_ADJUSTMENT)
+	{
+		GtkAdjustment *adj = GTK_ADJUSTMENT (object);
+		string = g_strdup_printf ("%lf %lf %lf %lf %lf %lf", 
+					  adj->value, adj->lower, adj->upper, 
+					  adj->step_increment, 
+					  adj->page_increment,
+					  adj->page_size);
+	}
 	else if ((gwidget = glade_widget_get_from_gobject (object)) != NULL)
 		string = g_strdup (gwidget->name);
 	else
@@ -538,34 +547,40 @@ glade_property_class_make_object_from_st
 	GObject *object = NULL;
 	gchar   *fullpath;
 
+	if (string == NULL) return NULL;
+	
 	if (property_class->pspec->value_type == GDK_TYPE_PIXBUF && project)
 	{
 		GdkPixbuf *pixbuf;
 
-		if (string)
-		{
-			fullpath = glade_project_resource_fullpath (project, string);
+		fullpath = glade_project_resource_fullpath (project, string);
 
-			if ((pixbuf = gdk_pixbuf_new_from_file
-				     (fullpath, NULL)) != NULL)
-			{
-				g_object_set_data_full (G_OBJECT(pixbuf), 
-							"GladeFileName",
-							g_strdup (string),
-							g_free);
+		if ((pixbuf = gdk_pixbuf_new_from_file (fullpath, NULL)) != NULL)
+		{
+			g_object_set_data_full (G_OBJECT(pixbuf), 
+						"GladeFileName",
+						g_strdup (string),
+						g_free);
 
-				object = G_OBJECT(pixbuf);
-			}
-			g_free (fullpath);
+			object = G_OBJECT(pixbuf);
 		}
+		g_free (fullpath);
+	}
+	if (property_class->pspec->value_type == GTK_TYPE_ADJUSTMENT)
+	{
+		gdouble value, lower, upper, step_increment, page_increment, page_size;
+		
+		sscanf (string, "%lf %lf %lf %lf %lf %lf", &value, &lower, &upper, &step_increment, &page_increment, &page_size);
+		object = G_OBJECT (gtk_adjustment_new (value, lower, upper, step_increment, page_increment, page_size));
 	}
 	else
 	{
 		GladeWidget *gwidget;
-		if (string && (gwidget = glade_project_get_widget_by_name 
+		if ((gwidget = glade_project_get_widget_by_name 
 			       (project, string)) != NULL)
 			object = gwidget->object;
 	}
+	
 	return object;
 }
 
@@ -925,7 +940,8 @@ glade_property_class_is_object (GladePro
 {
 	g_return_val_if_fail (GLADE_IS_PROPERTY_CLASS (class), FALSE);
 	return (G_IS_PARAM_SPEC_OBJECT(class->pspec) &&
-		class->pspec->value_type != GDK_TYPE_PIXBUF);
+		class->pspec->value_type != GDK_TYPE_PIXBUF &&
+		class->pspec->value_type != GTK_TYPE_ADJUSTMENT);
 }
 
 
@@ -1078,9 +1094,9 @@ glade_property_class_make_adjustment (Gl
 	} else if (G_IS_PARAM_SPEC_DOUBLE(property_class->pspec))
 	{
 		float_range = TRUE;
-		min = (gdouble)((GParamSpecFloat *) property_class->pspec)->minimum;
-		max = (gdouble)((GParamSpecFloat *) property_class->pspec)->maximum;
-		def = (gdouble)((GParamSpecFloat *) property_class->pspec)->default_value;
+		min = (gdouble)((GParamSpecDouble *) property_class->pspec)->minimum;
+		max = (gdouble)((GParamSpecDouble *) property_class->pspec)->maximum;
+		def = (gdouble)((GParamSpecDouble *) property_class->pspec)->default_value;
 	} else
 	{
 		g_critical ("Can't make adjustment for pspec type %s",
Index: widgets/gtk+.xml.in
===================================================================
RCS file: /cvs/gnome/glade3/widgets/gtk+.xml.in,v
retrieving revision 1.35
diff -u -p -r1.35 gtk+.xml.in
--- widgets/gtk+.xml.in	16 Mar 2006 06:59:02 -0000	1.35
+++ widgets/gtk+.xml.in	16 Mar 2006 20:51:29 -0000
@@ -432,6 +432,12 @@
 
     <glade-widget-class name="GtkSpinButton" generic-name="spinbutton" _title="Spin Button">
       <properties>
+        <property id="text" disabled="True"/>
+        <property id="value" disabled="True"/>
+	<property id="can-focus" default="True"/>
+        <property id="adjustment" _name="Value" default="0 0 100 1 10 10">
+	  <set-function>glade_gtk_spin_button_set_adjustment</set-function>
+	</property>
         <property id="update-policy">
   	  <displayable-values>
 	    <value id="GTK_UPDATE_ALWAYS" _name="Always"/>
@@ -853,6 +859,8 @@
     
     <glade-widget-class name="GtkViewport" generic-name="viewport" _title="Viewport">
       <properties>
+        <property id="hadjustment" disabled="True"/>
+	<property id="vadjustment" disabled="True"/>
       	<property id="shadow-type">
   	  <displayable-values>
 	    <value id="GTK_SHADOW_NONE" _name="None"/>
@@ -867,6 +875,8 @@
     
     <glade-widget-class name="GtkScrolledWindow" generic-name="scrolledwindow" _title="Scrolled Window">
       <properties>
+        <property id="hadjustment" disabled="True"/>
+	<property id="vadjustment" disabled="True"/>
       	<property id="shadow-type">
   	  <displayable-values>
 	    <value id="GTK_SHADOW_NONE" _name="None"/>
Index: src/glade-catalog.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-catalog.c,v
retrieving revision 1.29
diff -u -p -r1.29 glade-catalog.c
--- src/glade-catalog.c	24 Jan 2006 05:37:29 -0000	1.29
+++ src/glade-catalog.c	16 Mar 2006 20:46:46 -0000
@@ -37,6 +37,7 @@
 #include "glade-catalog.h"
 #include "glade-widget-class.h"
 
+typedef void   (*GladeCatalogInitFunc) (void);
 
 struct _GladeCatalog
 {
@@ -57,6 +58,11 @@ struct _GladeCatalog
 
 	GladeXmlContext *context;/* Xml context is stored after open
 				  * before classes are loaded         */
+	
+	GModule *module;
+	
+	gchar *init_function_name;/* Catalog's init function name */
+	GladeCatalogInitFunc init_function;
 };
 
 struct _GladeWidgetGroup
@@ -80,6 +86,20 @@ void                   widget_group_free
  */
 static GList *loaded_catalogs = NULL;
 
+static gboolean
+catalog_get_function (GladeCatalog *catalog, 
+		      const gchar *symbol_name,
+		      gpointer *symbol_ptr)
+{
+	if (catalog->module == NULL)
+		catalog->module = glade_util_load_library (catalog->library);
+	
+	if (catalog->module)
+		return g_module_symbol (catalog->module, symbol_name, symbol_ptr);
+
+	return FALSE;
+}
+
 static GladeCatalog *
 catalog_open (const gchar *filename)
 {
@@ -88,7 +108,7 @@ catalog_open (const gchar *filename)
 	GladeXmlDoc     *doc;
 	GladeXmlNode    *root;
 
-	g_debug ("Loading catalog: %s\n", filename);
+	g_debug ("Opening catalog: %s\n", filename);
 
 	/* get the context & root node of the catalog file */
 	context = glade_xml_context_new_from_path (filename,
@@ -130,7 +150,13 @@ catalog_open (const gchar *filename)
 		glade_xml_get_property_string (root, GLADE_TAG_DEPENDS);
 	catalog->domain =
 		glade_xml_get_property_string (root, GLADE_TAG_DOMAIN);
-
+	catalog->init_function_name =
+		glade_xml_get_value_string (root, GLADE_TAG_INIT_FUNCTION);
+	
+	if (catalog->init_function_name)
+		catalog_get_function (catalog, catalog->init_function_name,
+				      (gpointer) &catalog->init_function);
+	
 	g_debug ("Successfully parsed catalog: %s\n", catalog->name);
 
 	return catalog;
@@ -146,6 +172,15 @@ catalog_load (GladeCatalog *catalog)
 
 	g_return_if_fail (catalog->context != NULL);
 	
+	g_debug ("Loading catalog: %s\n", catalog->name);
+	
+	if (catalog->init_function)
+	{
+		g_debug ("Executing catalog's init function. (%s)\n", 
+			 catalog->init_function_name);
+		catalog->init_function ();
+	}
+	
 	doc  = glade_xml_context_get_doc (catalog->context);
 	root = glade_xml_doc_get_root (doc);
 	node = glade_xml_node_get_children (root);
@@ -171,7 +206,7 @@ catalog_load (GladeCatalog *catalog)
 	catalog->context =
 		(glade_xml_context_free (catalog->context), NULL);
 	
-	g_debug ("Successfully parsed catalog: %s\n", catalog->name);
+	g_debug ("Successfully loaded catalog: %s\n", catalog->name);
 
 	return;
 }
Index: src/glade-project-view.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-project-view.c,v
retrieving revision 1.55
diff -u -p -r1.55 glade-project-view.c
--- src/glade-project-view.c	16 Mar 2006 06:59:01 -0000	1.55
+++ src/glade-project-view.c	16 Mar 2006 20:46:46 -0000
@@ -192,7 +192,7 @@ glade_project_view_populate_model (Glade
 		g_assert (gwidget);
 
 		if (gwidget->parent == NULL)
-			toplevels = g_list_append (toplevels, object);
+			toplevels = g_list_prepend (toplevels, object);
 	}
 
 	/* add the widgets and recurse */
Index: src/glade-property.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-property.c,v
retrieving revision 1.82
diff -u -p -r1.82 glade-property.c
--- src/glade-property.c	1 Mar 2006 19:59:12 -0000	1.82
+++ src/glade-property.c	16 Mar 2006 20:46:48 -0000
@@ -315,8 +315,9 @@ glade_property_write_impl (GladeProperty
 	 * the opening and the closing of the property tag */
 	tmp = glade_property_class_make_string_from_gvalue (property->class,
 							    property->value);
-	if (!tmp || !tmp[0])
-		return FALSE;
+	
+	/* an empty string is a valid value (a flag set to 0) */
+	if (tmp == NULL) return FALSE;
 
 	if (property->class->orig_def == NULL)
 	{
Index: src/glade-widget-class.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-widget-class.c,v
retrieving revision 1.88
diff -u -p -r1.88 glade-widget-class.c
--- src/glade-widget-class.c	16 Mar 2006 06:59:01 -0000	1.88
+++ src/glade-widget-class.c	16 Mar 2006 20:46:49 -0000
@@ -929,55 +929,6 @@ glade_widget_class_merge (GladeWidgetCla
 		(&widget_class->children, parent_class->children, widget_class);
 }
 
-/**
- * glade_widget_class_load_library:
- * @library_name: name of the library
- *
- * Loads the named library from the Glade modules directory, or failing that
- * from the standard platform specific directories.
- *
- * The @library_name should not include any platform specifix prefix or suffix,
- * those are automatically added, if needed, by g_module_build_path()
- *
- * Returns: a #GModule on success, or %NULL on failure.
- */
-static GModule *
-glade_widget_class_load_library (const gchar *library_name)
-{
-	gchar   *path;
-	GModule *module;
-
-	path = g_module_build_path (glade_modules_dir, library_name);
-	if (!path)
-	{
-		g_warning (_("Not enough memory."));
-		return NULL;
-	}
-
-	module = g_module_open (path, G_MODULE_BIND_LAZY);
-	g_free (path);
-
-	if (!module)
-	{
-		path = g_module_build_path (NULL, library_name);
-		if (!path)
-		{
-			g_warning (_("Not enough memory."));
-			return NULL;
-		}
-
-		module = g_module_open (path, G_MODULE_BIND_LAZY);
-		g_free (path);
-	}
-
-	if (!module)
-	{
-		g_warning (_("Unable to open the module %s."), library_name);
-	}
-
-	return module;
-}
-
 GladeWidgetClass *
 glade_widget_class_new (GladeXmlNode *class_node,
 			const gchar  *catname, 
@@ -1028,7 +979,7 @@ glade_widget_class_new (GladeXmlNode *cl
 	module = NULL;
 	if (library) 
 	{
-		module = glade_widget_class_load_library (library);
+		module = glade_util_load_library (library);
 		if (!module)
 		{
 			g_warning ("Failed to load external library '%s'",
Index: src/glade-utils.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-utils.c,v
retrieving revision 1.68
diff -u -p -r1.68 glade-utils.c
--- src/glade-utils.c	16 Mar 2006 05:29:37 -0000	1.68
+++ src/glade-utils.c	16 Mar 2006 20:46:56 -0000
@@ -1416,3 +1416,53 @@ glade_util_copy_file (const gchar  *src_
 	}
 	return success;
 }
+
+
+/**
+ * glade_util_load_library:
+ * @library_name: name of the library
+ *
+ * Loads the named library from the Glade modules directory, or failing that
+ * from the standard platform specific directories.
+ *
+ * The @library_name should not include any platform specifix prefix or suffix,
+ * those are automatically added, if needed, by g_module_build_path()
+ *
+ * Returns: a #GModule on success, or %NULL on failure.
+ */
+GModule *
+glade_util_load_library (const gchar *library_name)
+{
+	gchar   *path;
+	GModule *module;
+
+	path = g_module_build_path (glade_modules_dir, library_name);
+	if (!path)
+	{
+		g_warning (_("Not enough memory."));
+		return NULL;
+	}
+
+	module = g_module_open (path, G_MODULE_BIND_LAZY);
+	g_free (path);
+
+	if (!module)
+	{
+		path = g_module_build_path (NULL, library_name);
+		if (!path)
+		{
+			g_warning (_("Not enough memory."));
+			return NULL;
+		}
+
+		module = g_module_open (path, G_MODULE_BIND_LAZY);
+		g_free (path);
+	}
+
+	if (!module)
+	{
+		g_warning (_("Unable to open the module %s."), library_name);
+	}
+
+	return module;
+}
Index: src/glade-utils.h
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-utils.h,v
retrieving revision 1.42
diff -u -p -r1.42 glade-utils.h
--- src/glade-utils.h	24 Feb 2006 02:04:38 -0000	1.42
+++ src/glade-utils.h	16 Mar 2006 20:46:56 -0000
@@ -115,6 +115,8 @@ LIBGLADEUI_API
 gboolean          glade_util_copy_file             (const gchar  *src_path,
 						    const gchar  *dest_path);
 
+LIBGLADEUI_API
+GModule          *glade_util_load_library          (const gchar  *library_name);
 
 G_END_DECLS
 
Index: src/glade.h
===================================================================
RCS file: /cvs/gnome/glade3/src/glade.h,v
retrieving revision 1.58
diff -u -p -r1.58 glade.h
--- src/glade.h	16 Mar 2006 06:59:01 -0000	1.58
+++ src/glade.h	16 Mar 2006 20:46:56 -0000
@@ -132,6 +132,7 @@ typedef struct _GladeProject      GladeP
 #define GLADE_TAG_VISIBLE_LINES                   "visible-lines"
 #define GLADE_TAG_RESOURCE                        "resource"
 #define GLADE_TAG_ATK_RELATION                    "atk-relation"
+#define GLADE_TAG_INIT_FUNCTION                   "init-function"
 
 #define GLADE_NUMERICAL_STEP_INCREMENT             1
 #define GLADE_FLOATING_STEP_INCREMENT              0.01F
_______________________________________________
Glade-devel maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel

Reply via email to