[POS-commit] r239 - libglade

Johan Dahlin jdahlin at async.com.br
Wed Mar 30 16:07:43 BRT 2005


Author: jdahlin
Date: 2005-03-30 16:07:43 -0300 (Wed, 30 Mar 2005)
New Revision: 239

Modified:
   libglade/glade-build.h
   libglade/glade-gtk.c
   libglade/glade-parser.c
   libglade/glade-parser.h
   libglade/glade-xml.c
   libglade/glade-xml.h
   libglade/test.c
Log:
Port most of the internals and the public API to use GObjects instead of GtkWidgets.

Modified: libglade/glade-build.h
===================================================================
--- libglade/glade-build.h	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-build.h	2005-03-30 19:07:43 UTC (rev 239)
@@ -35,78 +35,76 @@
 
 G_BEGIN_DECLS
 	
-/* create a new widget of some type.  Don't parse `standard' widget options */
-typedef GtkWidget *(* GladeNewFunc)               (GladeXML *xml,
-						   GType widget_type,
-						   GladeWidgetInfo *info);
 /* call glade_xml_build_widget on each child node, and pack in self */
 typedef void       (* GladeBuildChildrenFunc)     (GladeXML *xml,
-						   GtkWidget *parent,
-						   GladeWidgetInfo *info);
-typedef GtkWidget *(* GladeFindInternalChildFunc) (GladeXML *xml,
-						   GtkWidget *parent,
+						   GObject *parent,
+						   GladeObjectInfo *info);
+typedef GObject   *(* GladeFindInternalChildFunc) (GladeXML *xml,
+						   GObject *parent,
 						   const gchar *childname);
 
 typedef void       (* GladeApplyCustomPropFunc)   (GladeXML *xml,
-						   GtkWidget *widget,
+						   GObject *object,
 						   const gchar *propname,
 						   const gchar *value);
 
-/* register handlers for a widget */
-void glade_register_widget(GType type,
-			   GladeNewFunc new_func,
+/* register handlers for a object */
+void glade_register_object(GType type,
 			   GladeBuildChildrenFunc build_children,
 			   GladeFindInternalChildFunc find_internal_child);
 
 /* register a custom handler for a property (that may not have an
  * associated gobject property.  Works in conjunction with
- * glade_standard_build_widget. */
+ * glade_standard_build_object. */
 void glade_register_custom_prop(GType type,
 				const gchar *prop_name,
 				GladeApplyCustomPropFunc apply_prop);
 
-/* set the current toplevel widget while building (use NULL to unset) */
+/* set the current toplevel object while building (use NULL to unset) */
 void       glade_xml_set_toplevel(GladeXML *xml, GtkWindow *window);
 
 /* make sure that xml->priv->accel_group is a valid AccelGroup */
 GtkAccelGroup *glade_xml_ensure_accel(GladeXML *xml);
 
-void glade_xml_handle_widget_prop(GladeXML *self, GtkWidget *widget,
+void glade_xml_handle_object_prop(GladeXML *self,
+				  GObject *object,
 				  const gchar *prop_name,
 				  const gchar *value_name);
 
 void glade_xml_set_packing_property (GladeXML   *self,
-				     GtkWidget  *parent, GtkWidget  *child,
+				     GtkWidget  *parent,
+				     GtkWidget  *child,
 				     const char *name,   const char *value);
 
 /* this function is called to build the interface by GladeXML */
-GtkWidget *glade_xml_build_widget(GladeXML *self, GladeWidgetInfo *info);
+GObject *glade_xml_build_object(GladeXML *self, GladeObjectInfo *info);
 
 /* this function is used to get a pointer to the internal child of a
- * container widget.  It would generally be called by the
+ * container object.  It would generally be called by the
  * build_children callback for any children with the internal_child
  * name set. */
-void glade_xml_handle_internal_child(GladeXML *self, GtkWidget *parent,
+void glade_xml_handle_internal_child(GladeXML *self,
+				     GObject *parent,
 				     GladeChildInfo *child_info);
 
-/* This function performs half of what glade_xml_build_widget does.  It is
- * useful when the widget has already been created.  Usually it would not
+/* This function performs half of what glade_xml_build_object does.  It is
+ * useful when the object has already been created.  Usually it would not
  * have any use at all. */
 void       glade_xml_set_common_params(GladeXML *self,
-				       GtkWidget *widget,
-				       GladeWidgetInfo *info);
+				       GObject *object,
+				       GladeObjectInfo *info);
 
 gboolean glade_xml_set_value_from_string (GladeXML *xml,
 					  GParamSpec *pspec,
 					  const gchar *string,
 					  GValue *value);
 
-GtkWidget *glade_standard_build_widget(GladeXML *xml, GType widget_type,
-				       GladeWidgetInfo *info);
+GObject *glade_standard_build_object(GladeXML *xml, GType object_type,
+				     GladeObjectInfo *info);
 
-/* A standard child building routine that can be used in widget builders */
-void glade_standard_build_children(GladeXML *self, GtkWidget *parent,
-				   GladeWidgetInfo *info);
+/* A standard child building routine that can be used in object builders */
+void glade_standard_build_children(GladeXML *self, GObject *parent,
+				   GladeObjectInfo *info);
 
 /* this is a wrapper for gtk_type_enum_find_value, that just returns the
  * integer value for the enum */
@@ -129,7 +127,7 @@
 }
 
 /* prototype for plugin init function (should be implemented by plugin) */
-G_MODULE_EXPORT void glade_module_register_widgets(void);
+G_MODULE_EXPORT void glade_module_register_objects(void);
 
 G_END_DECLS
 	

Modified: libglade/glade-gtk.c
===================================================================
--- libglade/glade-gtk.c	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-gtk.c	2005-03-30 19:07:43 UTC (rev 239)
@@ -39,14 +39,14 @@
 void _glade_init_gtk_widgets(void);
 
 static void
-custom_noop (GladeXML *xml, GtkWidget *widget,
+custom_noop (GladeXML *xml, GObject *obj,
 	     const char *name, const char *value)
 {
     ;
 }
 
 static void
-set_visible(GladeXML *xml, GtkWidget *widget,
+set_visible(GladeXML *xml, GObject *obj,
 	    const gchar *prop_name, const gchar *prop_value)
 {
     static GQuark visible_id = 0;
@@ -55,11 +55,11 @@
 	visible_id = g_quark_from_static_string("Libglade::visible");
 
     if (BOOL(prop_value))
-	g_object_set_qdata(G_OBJECT(widget), visible_id, GINT_TO_POINTER(TRUE));
+	g_object_set_qdata(obj, visible_id, GINT_TO_POINTER(TRUE));
 }
 
 static void
-set_tooltip(GladeXML *xml, GtkWidget *widget,
+set_tooltip(GladeXML *xml, GObject *obj,
 	    const gchar *prop_name, const gchar *prop_value)
 {
     g_print("XXX: handle tooltips without accessing private parts of GladeXML\n");
@@ -73,21 +73,21 @@
 }
 
 static void
-set_has_default(GladeXML *xml, GtkWidget *widget,
+set_has_default(GladeXML *xml, GObject *obj,
 		const gchar *prop_name, const gchar *prop_value)
 {
-    if (!GTK_WIDGET_CAN_DEFAULT(widget))
+    if (!GTK_WIDGET_CAN_DEFAULT(obj))
 	return;
 
     g_print("XXX: handle has-default without accessing private parts of GladeXML\n");
 #if 0    
     if (BOOL(prop_value))
-	xml->priv->default_widget = widget;
+	xml->priv->default_widget = obj;
 #endif    
 }
 
 static void
-set_has_focus(GladeXML *xml, GtkWidget *widget,
+set_has_focus(GladeXML *xml, GObject *obj,
 	      const gchar *prop_name, const gchar *prop_value)
 {
     g_print("XXX: handle focus without accessing private parts of GladeXML\n");
@@ -98,110 +98,111 @@
 }
 
 static void
-list_item_set_label (GladeXML *xml, GtkWidget *w,
+list_item_set_label (GladeXML *xml, GObject *obj,
 		     const char *name, const char *value)
 {
     GtkWidget *child;
 
-    child = gtk_bin_get_child (GTK_BIN (w));
+    child = gtk_bin_get_child (GTK_BIN (obj));
     if (child)
-	gtk_container_remove (GTK_CONTAINER (w), child);
+	gtk_container_remove (GTK_CONTAINER (obj), child);
     
     /* copied from gtk_list_item_new_with_label() */
     child = gtk_label_new (value);
     gtk_misc_set_alignment (GTK_MISC (child), 0.0, 0.5);
     gtk_misc_set_padding (GTK_MISC (child), 0, 1);
 
-    gtk_container_add (GTK_CONTAINER (w), child);
+    gtk_container_add (GTK_CONTAINER (obj), child);
     gtk_widget_show (child);
 }
 
 static void
-text_view_set_text (GladeXML *xml, GtkWidget *w,
+text_view_set_text (GladeXML *xml, GObject *obj,
 		    const char *name, const char *value)
 {
     GtkTextBuffer *buffy;
 
     buffy = gtk_text_buffer_new (NULL);
     gtk_text_buffer_set_text (buffy, value, strlen (value));
-    gtk_text_view_set_buffer (GTK_TEXT_VIEW (w), buffy);
+    gtk_text_view_set_buffer (GTK_TEXT_VIEW (obj), buffy);
     g_object_unref (G_OBJECT (buffy));
 }
 
 static void
-calendar_set_display_options (GladeXML *xml, GtkWidget *w,
+calendar_set_display_options (GladeXML *xml, GObject *obj,
 			      const char *name, const char *value)
 {
     gtk_calendar_display_options (
-	GTK_CALENDAR (w),
+	GTK_CALENDAR (obj),
 	glade_flags_from_string (GTK_TYPE_CALENDAR_DISPLAY_OPTIONS,
 				 value));
 }
 
 static void
-check_menu_item_set_always_show_toggle (GladeXML *xml, GtkWidget *w,
+check_menu_item_set_always_show_toggle (GladeXML *xml, GObject *obj,
 					const char *name, const char *value)
 {
-    gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (w), BOOL (value));
+    gtk_check_menu_item_set_show_toggle (GTK_CHECK_MENU_ITEM (obj), BOOL (value));
 }
 
 static void
-radio_menu_item_set_group (GladeXML *xml, GtkWidget *w,
+radio_menu_item_set_group (GladeXML *xml, GObject *obj,
 			   const char *name, const char *value)
 {
-    GtkWidget *group;
+    GObject *group;
 
-    group = glade_xml_get_widget (xml, value);
+    group = glade_xml_get_object (xml, value);
     if (!group) {
 	g_warning ("Radio button group %s could not be found", value);
 	return;
     }
 
-    if (group == w) {
+    if (group == obj) {
 	g_message ("Group is self, skipping.");
 	return;
     }
 
     gtk_radio_menu_item_set_group (
-	GTK_RADIO_MENU_ITEM (w),
+	GTK_RADIO_MENU_ITEM (obj),
 	gtk_radio_menu_item_get_group (
 	    GTK_RADIO_MENU_ITEM (group)));
 }
 
 static void
-toolbar_set_tooltips (GladeXML *xml, GtkWidget *w,
+toolbar_set_tooltips (GladeXML *xml, GObject *obj,
 		      const char *name, const char *value)
 {
-    gtk_toolbar_set_tooltips (GTK_TOOLBAR (w), BOOL (value));
+    gtk_toolbar_set_tooltips (GTK_TOOLBAR (obj), BOOL (value));
 }
 
 static void
-statusbar_set_has_resize_grip (GladeXML *xml, GtkWidget *w,
+statusbar_set_has_resize_grip (GladeXML *xml, GObject *obj,
 			       const char *name, const char *value)
 {
-    gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (w), BOOL (value));
+    gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (obj), BOOL (value));
 }
 
 static void
-ruler_set_metric (GladeXML *xml, GtkWidget *w,
+ruler_set_metric (GladeXML *xml, GObject *obj,
 		  const char *name, const char *value)
 {
     gtk_ruler_set_metric (
-	GTK_RULER (w),
+	GTK_RULER (obj),
 	glade_enum_from_string (GTK_TYPE_METRIC_TYPE, value));
 }
 
 static void
-menu_item_set_label (GladeXML *xml, GtkWidget *w,
+menu_item_set_label (GladeXML *xml, GObject *obj,
 		     const char *name, const char *value)
 {
-    GtkWidget *child = GTK_BIN (w)->child;
+    GtkWidget *child = GTK_BIN (obj)->child;
 
     if (!child) {
 	child = gtk_accel_label_new("");
 	gtk_misc_set_alignment(GTK_MISC(child), 0.0, 0.5);
-	gtk_container_add(GTK_CONTAINER(w), child);
-	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child), w);
+	gtk_container_add(GTK_CONTAINER(obj), child);
+	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child),
+					 GTK_WIDGET(obj));
 	gtk_widget_show(child);
     }
 
@@ -210,16 +211,17 @@
 }
 
 static void
-menu_item_set_use_underline (GladeXML *xml, GtkWidget *w,
+menu_item_set_use_underline (GladeXML *xml, GObject *obj,
 			     const char *name, const char *value)
 {
-    GtkWidget *child = GTK_BIN (w)->child;
+    GtkWidget *child = GTK_BIN (obj)->child;
 
     if (!child) {
 	child = gtk_accel_label_new("");
 	gtk_misc_set_alignment(GTK_MISC(child), 0.0, 0.5);
-	gtk_container_add(GTK_CONTAINER(w), child);
-	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child), w);
+	gtk_container_add(GTK_CONTAINER(obj), child);
+	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child),
+					 GTK_WIDGET(obj));
 	gtk_widget_show(child);
     }
 
@@ -228,16 +230,17 @@
 }
 
 static void
-menu_item_set_use_stock (GladeXML *xml, GtkWidget *w,
+menu_item_set_use_stock (GladeXML *xml, GObject *obj,
 			 const gchar *name, const gchar *value)
 {
-    GtkWidget *child = GTK_BIN (w)->child;
+    GtkWidget *child = GTK_BIN (obj)->child;
 
     if (!child) {
 	child = gtk_accel_label_new("");
 	gtk_misc_set_alignment(GTK_MISC(child), 0.0, 0.5);
-	gtk_container_add(GTK_CONTAINER(w), child);
-	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child), w);
+	gtk_container_add(GTK_CONTAINER(obj), child);
+	gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(child),
+					 GTK_WIDGET(obj));
 	gtk_widget_show(child);
     }
 
@@ -249,11 +252,11 @@
 	    /* put in the stock image next to the text.  Done before
              * messing with the label child, so that stock_id doesn't
              * become invalid. */
-	    if (GTK_IS_IMAGE_MENU_ITEM(w)) {
+	    if (GTK_IS_IMAGE_MENU_ITEM(obj)) {
 		GtkWidget *image =
 		    gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_MENU);
 
-		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(w), image);
+		gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(obj), image);
 		gtk_widget_show(image);
 	    }
 
@@ -261,7 +264,7 @@
 	    gtk_label_set_use_underline(GTK_LABEL(child), TRUE);
 
 	    if (stock_item.keyval)
-		gtk_widget_add_accelerator (w,
+		gtk_widget_add_accelerator (GTK_WIDGET(obj),
 					    "activate",
 					    glade_xml_ensure_accel(xml),
 					    stock_item.keyval,
@@ -274,10 +277,10 @@
 }
 
 static void
-window_set_wmclass_name (GladeXML *xml, GtkWidget *w,
+window_set_wmclass_name (GladeXML *xml, GObject *obj,
 			 const gchar *name, const gchar *value)
 {
-    GtkWindow *window = GTK_WINDOW(w);
+    GtkWindow *window = GTK_WINDOW(obj);
     gchar *wmclass = g_strdup(window->wmclass_class);
 
     gtk_window_set_wmclass(window, value, wmclass);
@@ -285,10 +288,10 @@
 }
 
 static void
-window_set_wmclass_class (GladeXML *xml, GtkWidget *w,
+window_set_wmclass_class (GladeXML *xml, GObject *obj,
 			  const gchar *name, const gchar *value)
 {
-    GtkWindow *window = GTK_WINDOW(w);
+    GtkWindow *window = GTK_WINDOW(obj);
     gchar *wmname = g_strdup(window->wmclass_name);
 
     gtk_window_set_wmclass(window, wmname, value);
@@ -296,22 +299,22 @@
 }
 
 static void
-entry_set_invisible_char (GladeXML *xml, GtkWidget *w,
+entry_set_invisible_char (GladeXML *xml, GObject *obj,
 			  const gchar *name, const gchar *value)
 {
-    gtk_entry_set_invisible_char (GTK_ENTRY (w), value [0]);
+    gtk_entry_set_invisible_char (GTK_ENTRY (obj), value [0]);
 }
 
 static void
-button_set_response_id (GladeXML *xml, GtkWidget *w,
+button_set_response_id (GladeXML *xml, GObject *obj,
 			const gchar *name, const gchar *value)
 {
-    g_object_set_data (G_OBJECT (w), "response_id",
+    g_object_set_data (G_OBJECT (obj), "response_id",
 		       GINT_TO_POINTER (INT (value)));
 }
 
 static void
-tool_button_set_icon (GladeXML *xml, GtkWidget *w,
+tool_button_set_icon (GladeXML *xml, GObject *obj,
 		      const char *name, const char *value)
 {
     GdkPixbuf *pb;
@@ -331,11 +334,11 @@
     g_object_unref (pb);
 
     gtk_widget_show (image);
-    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (w), image);
+    gtk_tool_button_set_icon_widget (GTK_TOOL_BUTTON (obj), image);
 }
 
 static void
-combo_box_set_items (GladeXML *xml, GtkWidget *w,
+combo_box_set_items (GladeXML *xml, GObject *obj,
 		     const char *name, const char *value)
 {
     GtkListStore *store;
@@ -346,16 +349,16 @@
     /* If the "items" property is set, we create a simple model with just
        one column of text. */
     store = gtk_list_store_new (1, G_TYPE_STRING);
-    gtk_combo_box_set_model (GTK_COMBO_BOX (w), GTK_TREE_MODEL (store));
+    gtk_combo_box_set_model (GTK_COMBO_BOX (obj), GTK_TREE_MODEL (store));
 
     /* GtkComboBoxEntry creates the cell renderer itself, but we have to set
        the column containing the text. */
-    if (GTK_IS_COMBO_BOX_ENTRY (w)) {
-	gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (w), 0);
+    if (GTK_IS_COMBO_BOX_ENTRY (obj)) {
+	gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (obj), 0);
     } else {
 	cell = gtk_cell_renderer_text_new ();
-	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (w), cell, TRUE);
-	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (w), cell,
+	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (obj), cell, TRUE);
+	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (obj), cell,
 					"text", 0,
 					NULL);
     }
@@ -379,40 +382,40 @@
 }
 
 static void
-menuitem_build_children(GladeXML *self, GtkWidget *w,
-			GladeWidgetInfo *info)
+menuitem_build_children(GladeXML *self, GObject *obj,
+			GladeObjectInfo *info)
 {
     gint i;
 
-    g_object_ref(G_OBJECT(w));
+    g_object_ref(G_OBJECT(obj));
     for (i = 0; i < info->n_children; i++) {
 	GtkWidget       *child;
-	GladeWidgetInfo *childinfo = info->children[i].child;
+	GladeObjectInfo *childinfo = info->children[i].child;
 
 	if (info->children[i].internal_child) {
-	    glade_xml_handle_internal_child(self, w, &info->children[i]);
+	    glade_xml_handle_internal_child(self, obj, &info->children[i]);
 	    continue;
 	}
 
-	child = glade_xml_build_widget(self, childinfo);
+	child = GTK_WIDGET(glade_xml_build_object(self, childinfo));
 
 	if (GTK_IS_MENU(child))
-	    gtk_menu_item_set_submenu(GTK_MENU_ITEM(w), child);
+	    gtk_menu_item_set_submenu(GTK_MENU_ITEM(obj), child);
 	else
-	    gtk_container_add(GTK_CONTAINER(w), child);
+	    gtk_container_add(GTK_CONTAINER(obj), child);
     }
-    g_object_unref(G_OBJECT(w));
+    g_object_unref(G_OBJECT(obj));
 }
 
 static void
-gtk_dialog_build_children(GladeXML *self, GtkWidget *w,
-			  GladeWidgetInfo *info)
+gtk_dialog_build_children(GladeXML *self, GObject *obj,
+			  GladeObjectInfo *info)
 
 {
-    GtkDialog *dialog = GTK_DIALOG (w);
+    GtkDialog *dialog = GTK_DIALOG (obj);
     GList *children, *list;
 
-    glade_standard_build_children (self, w, info);
+    glade_standard_build_children (self, obj, info);
 
     if (dialog->action_area == NULL)
 	return;
@@ -440,8 +443,8 @@
 
 
 static void
-frame_build_children(GladeXML *self, GtkWidget *parent,
-		     GladeWidgetInfo *info)
+frame_build_children(GladeXML *self, GObject *parent,
+		     GladeObjectInfo *info)
 {
     gint i, j;
     enum {
@@ -449,10 +452,10 @@
 	LABEL_ITEM
     } type;
 
-    g_object_ref(G_OBJECT(parent));
+    g_object_ref(parent);
     for (i = 0; i < info->n_children; i++) {
-	GladeWidgetInfo *childinfo = info->children[i].child;
-	GtkWidget *child = glade_xml_build_widget(self, childinfo);
+	GladeObjectInfo *childinfo = info->children[i].child;
+	GtkWidget *child = GTK_WIDGET(glade_xml_build_object(self, childinfo));
 
 	type = FRAME_ITEM;
 	/* there should really only be 2 children */
@@ -472,24 +475,24 @@
 	    gtk_container_add (GTK_CONTAINER (parent), child);
 	}
     }
-    g_object_unref(G_OBJECT(parent));
+    g_object_unref(parent);
 }
 
 static void
 expander_build_children (GladeXML        *self,
-			 GtkWidget       *parent,
-			 GladeWidgetInfo *info)
+			 GObject         *parent,
+			 GladeObjectInfo *info)
 {
     int i;
 
     g_object_ref (parent);
     for (i = 0; i < info->n_children; i++) {
-	GladeWidgetInfo *childinfo = info->children [i].child;
+	GladeObjectInfo *childinfo = info->children [i].child;
 	GtkWidget       *child;
 	gboolean         label_item = FALSE;
 	int              j;
 	
-	child = glade_xml_build_widget (self, childinfo);
+	child = GTK_WIDGET(glade_xml_build_object(self, childinfo));
 
 	/* there should really only be 2 children */
 	for (j = 0; j < info->children [i].n_properties; j++) {
@@ -511,8 +514,8 @@
 }
 
 static void
-notebook_build_children(GladeXML *self, GtkWidget *parent,
-			GladeWidgetInfo *info)
+notebook_build_children(GladeXML *self, GObject *parent,
+			GladeObjectInfo *info)
 {
     gint i, j, tab = 0;
     enum {
@@ -521,10 +524,10 @@
 	MENU_ITEM
     } type;
 
-    g_object_ref(G_OBJECT(parent));
+    g_object_ref(parent);
     for (i = 0; i < info->n_children; i++) {
-	GladeWidgetInfo *childinfo = info->children[i].child;
-	GtkWidget *child = glade_xml_build_widget(self, childinfo);
+	GladeObjectInfo *childinfo = info->children[i].child;
+	GtkWidget *child = GTK_WIDGET(glade_xml_build_object(self, childinfo));
 
 	type = PANE_ITEM;
 	for (j = 0; j < info->children[i].n_properties; j++) {
@@ -547,13 +550,13 @@
 	    tab++;
 	}
     }
-    g_object_unref(G_OBJECT(parent));
+    g_object_unref(parent);
 }
 
 #if 0
 static void
 toolbar_build_children (GladeXML *xml, GtkWidget *parent,
-			GladeWidgetInfo *info)
+			GladeObjectInfo *info)
 {
     int i;
 
@@ -672,7 +675,7 @@
 
 	    glade_xml_set_common_params (xml, child, childinfo->child);
 	} else {
-	    child = glade_xml_build_widget (xml, childinfo->child);
+	    child = glade_xml_build_object (xml, childinfo->child);
 
 	    if (GTK_IS_TOOL_ITEM (child))
 		gtk_toolbar_insert (GTK_TOOLBAR (parent), GTK_TOOL_ITEM (child), -1);
@@ -684,7 +687,7 @@
 #endif
 
 static void
-paned_build_children (GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+paned_build_children (GladeXML *xml, GObject *obj, GladeObjectInfo *info)
 {
     int i;
     GtkWidget *child;
@@ -695,7 +698,7 @@
 	return;
     
     cinfo = &info->children[0];
-    child = glade_xml_build_widget (xml, cinfo->child);
+    child = GTK_WIDGET(glade_xml_build_object(xml, cinfo->child));
     
     resize = FALSE; shrink = TRUE;
     for (i = 0; i < cinfo->n_properties; i++) {
@@ -710,13 +713,13 @@
 	    g_warning ("Unknown GtkPaned child property: %s", name);
     }
 
-    gtk_paned_pack1 (GTK_PANED(w), child, resize, shrink);
+    gtk_paned_pack1 (GTK_PANED(obj), child, resize, shrink);
     
     if (info->n_children == 1)
 	return;
 
     cinfo = &info->children[1];
-    child = glade_xml_build_widget (xml, cinfo->child);
+    child = GTK_WIDGET (glade_xml_build_object (xml, cinfo->child));
     resize = TRUE; shrink = TRUE;
 
     for (i = 0; i < cinfo->n_properties; i++) {
@@ -731,25 +734,25 @@
 	    g_warning ("Unknown GtkPaned child property: %s", name);
     }
 	
-    gtk_paned_pack2 (GTK_PANED(w), child, resize, shrink);
+    gtk_paned_pack2 (GTK_PANED(obj), child, resize, shrink);
 }
 
 static void
-layout_build_children (GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+layout_build_children (GladeXML *xml, GObject *obj, GladeObjectInfo *info)
 {
     gint i;
 
     for (i = 0; i < info->n_children; i++) {
-	GladeWidgetInfo *childinfo = info->children[i].child;
+	GladeObjectInfo *childinfo = info->children[i].child;
 	GtkWidget *child = NULL;
 	gint j, x = 0, y = 0;
 
 	if (info->children[i].internal_child) {
-	    glade_xml_handle_internal_child(xml, w, &info->children[i]);
+	    glade_xml_handle_internal_child(xml, obj, &info->children[i]);
 	    continue;
 	}
 
-	child = glade_xml_build_widget(xml, childinfo);
+	child = GTK_WIDGET(glade_xml_build_object(xml, childinfo));
 	for (j = 0; j < info->children[i].n_properties; j++) {
 	    const gchar *name = info->children[i].properties[j].name;
 	    const gchar *value = info->children[i].properties[j].value;
@@ -763,24 +766,24 @@
 			  name);
 	}
 
-	gtk_layout_put(GTK_LAYOUT(w), child, x, y);
+	gtk_layout_put(GTK_LAYOUT(obj), child, x, y);
     }
 }
 
-static GtkWidget *
-dialog_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+dialog_find_internal_child(GladeXML *xml, GObject *parent,
 			   const gchar *childname)
 {
     if (!strcmp(childname, "vbox"))
-	return GTK_DIALOG(parent)->vbox;
+	return G_OBJECT(GTK_DIALOG(parent)->vbox);
     if (!strcmp(childname, "action_area"))
-	return GTK_DIALOG(parent)->action_area;
+	return G_OBJECT(GTK_DIALOG(parent)->action_area);
 
     return NULL;
 }
 
-static GtkWidget *
-image_menu_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+image_menu_find_internal_child(GladeXML *xml, GObject *parent,
 			       const gchar *childname)
 {
     if (!strcmp(childname, "image")) {
@@ -794,83 +797,83 @@
 		GTK_IMAGE_MENU_ITEM (parent), pl);
 	}
 
-	return pl;
+	return G_OBJECT(pl);
     }
     return NULL;
 }
 
-static GtkWidget *
-scrolled_window_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+scrolled_window_find_internal_child(GladeXML *xml, GObject *parent,
 				    const gchar *childname)
 {
     if (!strcmp(childname, "vscrollbar"))
-	return GTK_SCROLLED_WINDOW (parent)->vscrollbar;
+	return G_OBJECT(GTK_SCROLLED_WINDOW (parent)->vscrollbar);
     if (!strcmp(childname, "hscrollbar"))
-	return GTK_SCROLLED_WINDOW (parent)->hscrollbar;
+	return G_OBJECT(GTK_SCROLLED_WINDOW (parent)->hscrollbar);
     return NULL;
 }
 
-static GtkWidget *
-filesel_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+filesel_find_internal_child(GladeXML *xml, GObject *parent,
 			    const gchar *childname)
 {
     if (!strcmp(childname, "vbox"))
-	return GTK_DIALOG(parent)->vbox;
+	return G_OBJECT(GTK_DIALOG(parent)->vbox);
     if (!strcmp(childname, "action_area"))
-	return GTK_DIALOG(parent)->action_area;
+	return G_OBJECT(GTK_DIALOG(parent)->action_area);
     if (!strcmp(childname, "ok_button"))
-	return GTK_FILE_SELECTION(parent)->ok_button;
+	return G_OBJECT(GTK_FILE_SELECTION(parent)->ok_button);
     if (!strcmp(childname, "cancel_button"))
-	return GTK_FILE_SELECTION(parent)->cancel_button;
+	return G_OBJECT(GTK_FILE_SELECTION(parent)->cancel_button);
     if (!strcmp(childname, "help_button"))
-	return GTK_FILE_SELECTION(parent)->help_button;
+	return G_OBJECT(GTK_FILE_SELECTION(parent)->help_button);
     return NULL;
 }
 
-static GtkWidget *
-colorseldlg_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+colorseldlg_find_internal_child(GladeXML *xml, GObject *parent,
 				const gchar *childname)
 {
     if (!strcmp(childname, "vbox"))
-	return GTK_DIALOG(parent)->vbox;
+	return G_OBJECT(GTK_DIALOG(parent)->vbox);
     if (!strcmp(childname, "action_area"))
-	return GTK_DIALOG(parent)->action_area;
+	return G_OBJECT(GTK_DIALOG(parent)->action_area);
     if (!strcmp(childname, "ok_button"))
-	return GTK_COLOR_SELECTION_DIALOG(parent)->ok_button;
+	return G_OBJECT(GTK_COLOR_SELECTION_DIALOG(parent)->ok_button);
     if (!strcmp(childname, "cancel_button"))
-	return GTK_COLOR_SELECTION_DIALOG(parent)->cancel_button;
+	return G_OBJECT(GTK_COLOR_SELECTION_DIALOG(parent)->cancel_button);
     if (!strcmp(childname, "help_button"))
-	return GTK_COLOR_SELECTION_DIALOG(parent)->help_button;
+	return G_OBJECT(GTK_COLOR_SELECTION_DIALOG(parent)->help_button);
     if (!strcmp(childname, "color_selection"))
-	return GTK_COLOR_SELECTION_DIALOG(parent)->colorsel;
+	return G_OBJECT(GTK_COLOR_SELECTION_DIALOG(parent)->colorsel);
     return NULL;
 }
 
-static GtkWidget *
-fontseldlg_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+fontseldlg_find_internal_child(GladeXML *xml, GObject *parent,
 			       const gchar *childname)
 {
     if (!strcmp(childname, "vbox"))
-	return GTK_DIALOG(parent)->vbox;
+	return G_OBJECT(GTK_DIALOG(parent)->vbox);
     if (!strcmp(childname, "action_area"))
-	return GTK_DIALOG(parent)->action_area;
+	return G_OBJECT(GTK_DIALOG(parent)->action_area);
     if (!strcmp(childname, "ok_button"))
-	return GTK_FONT_SELECTION_DIALOG(parent)->ok_button;
+	return G_OBJECT(GTK_FONT_SELECTION_DIALOG(parent)->ok_button);
     if (!strcmp(childname, "cancel_button"))
-	return GTK_FONT_SELECTION_DIALOG(parent)->cancel_button;
+	return G_OBJECT(GTK_FONT_SELECTION_DIALOG(parent)->cancel_button);
     if (!strcmp(childname, "apply_button"))
-	return GTK_FONT_SELECTION_DIALOG(parent)->apply_button;
+	return G_OBJECT(GTK_FONT_SELECTION_DIALOG(parent)->apply_button);
     if (!strcmp(childname, "font_selection"))
-	return GTK_FONT_SELECTION_DIALOG(parent)->fontsel;
+	return G_OBJECT(GTK_FONT_SELECTION_DIALOG(parent)->fontsel);
     return NULL;
 }
 
-static GtkWidget *
-combo_box_entry_find_internal_child(GladeXML *xml, GtkWidget *parent,
+static GObject *
+combo_box_entry_find_internal_child(GladeXML *xml, GObject *parent,
 				    const gchar *childname)
 {
     if (!strcmp(childname, "entry"))
-	return gtk_bin_get_child(GTK_BIN(parent));
+	return G_OBJECT(gtk_bin_get_child(GTK_BIN(parent)));
     return NULL;
 }
 
@@ -902,170 +905,177 @@
     glade_register_custom_prop (GTK_TYPE_TOOL_BUTTON, "icon", tool_button_set_icon);
     glade_register_custom_prop (GTK_TYPE_COMBO_BOX, "items", combo_box_set_items);
 
-    glade_register_widget (GTK_TYPE_ABOUT_DIALOG, NULL,
+    glade_register_object (GTK_TYPE_ABOUT_DIALOG, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_ACCEL_LABEL, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ACCEL_LABEL, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_ALIGNMENT, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ALIGNMENT, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_ARROW, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ARROW, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_ASPECT_FRAME, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ASPECT_FRAME, 
 			   frame_build_children, NULL);
-    glade_register_widget (GTK_TYPE_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_BUTTON, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_CALENDAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_CALENDAR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_CHECK_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_CHECK_BUTTON, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_CHECK_MENU_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_CHECK_MENU_ITEM, 
 			   menuitem_build_children, NULL);
-    glade_register_widget (GTK_TYPE_COLOR_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_COLOR_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_COLOR_SELECTION, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_COLOR_SELECTION, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_COLOR_SELECTION_DIALOG, NULL,
-			   glade_standard_build_children, colorseldlg_find_internal_child);
-    glade_register_widget (GTK_TYPE_COMBO_BOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_COLOR_SELECTION_DIALOG, 
+			   glade_standard_build_children,
+			   colorseldlg_find_internal_child);
+    glade_register_object (GTK_TYPE_COMBO_BOX, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_COMBO_BOX_ENTRY, glade_standard_build_widget,
-			   glade_standard_build_children, combo_box_entry_find_internal_child);
-    glade_register_widget (GTK_TYPE_CURVE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_COMBO_BOX_ENTRY,
+			   glade_standard_build_children,
+			   combo_box_entry_find_internal_child);
+    glade_register_object (GTK_TYPE_CURVE, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_DIALOG, NULL,
-			   gtk_dialog_build_children, dialog_find_internal_child);
-    glade_register_widget (GTK_TYPE_DRAWING_AREA, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_DIALOG,
+			   gtk_dialog_build_children,
+			   dialog_find_internal_child);
+    glade_register_object (GTK_TYPE_DRAWING_AREA, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_ENTRY, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ENTRY, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_EVENT_BOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_EVENT_BOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_EXPANDER, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_EXPANDER, 
 			   expander_build_children, NULL);
-    glade_register_widget (GTK_TYPE_FILE_CHOOSER, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FILE_CHOOSER, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_FILE_CHOOSER_DIALOG, glade_standard_build_widget,
-			   gtk_dialog_build_children, dialog_find_internal_child);
-    glade_register_widget (GTK_TYPE_FILE_CHOOSER_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FILE_CHOOSER_DIALOG, 
+			   gtk_dialog_build_children,
+			   dialog_find_internal_child);
+    glade_register_object (GTK_TYPE_FILE_CHOOSER_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_FILE_SELECTION, NULL,
-			   glade_standard_build_children, filesel_find_internal_child);
-    glade_register_widget (GTK_TYPE_FIXED, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FILE_SELECTION,
+			   glade_standard_build_children,
+			   filesel_find_internal_child);
+    glade_register_object (GTK_TYPE_FIXED, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_FONT_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FONT_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_FONT_SELECTION, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FONT_SELECTION, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_FONT_SELECTION_DIALOG, NULL,
-			   glade_standard_build_children, fontseldlg_find_internal_child);
-    glade_register_widget (GTK_TYPE_FRAME, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_FONT_SELECTION_DIALOG, 
+			   glade_standard_build_children,
+			   fontseldlg_find_internal_child);
+    glade_register_object (GTK_TYPE_FRAME, 
 			   frame_build_children, NULL);
-    glade_register_widget (GTK_TYPE_GAMMA_CURVE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_GAMMA_CURVE, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_HANDLE_BOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HANDLE_BOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_HBUTTON_BOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HBUTTON_BOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_HBOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HBOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_HPANED, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HPANED, 
 			   paned_build_children, NULL);
-    glade_register_widget (GTK_TYPE_HRULER, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HRULER, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_HSCALE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HSCALE, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_HSCROLLBAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HSCROLLBAR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_HSEPARATOR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_HSEPARATOR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_ICON_VIEW, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_ICON_VIEW, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_IMAGE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_IMAGE, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_IMAGE_MENU_ITEM, glade_standard_build_widget,
-			   menuitem_build_children, image_menu_find_internal_child);
-    glade_register_widget (GTK_TYPE_INPUT_DIALOG, NULL,
+    glade_register_object (GTK_TYPE_IMAGE_MENU_ITEM, 
+			   menuitem_build_children,
+			   image_menu_find_internal_child);
+    glade_register_object (GTK_TYPE_INPUT_DIALOG, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_LABEL, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_LABEL, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_LAYOUT, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_LAYOUT, 
 			   layout_build_children, NULL);
-    glade_register_widget (GTK_TYPE_MENU, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_MENU, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_MENU_BAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_MENU_BAR, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_MENU_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_MENU_ITEM, 
 			   menuitem_build_children, NULL);
-    glade_register_widget (GTK_TYPE_MENU_TOOL_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_MENU_TOOL_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_MESSAGE_DIALOG, NULL,
+    glade_register_object (GTK_TYPE_MESSAGE_DIALOG, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_NOTEBOOK, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_NOTEBOOK, 
 			   notebook_build_children, NULL);
 #ifdef HAVE_GTK_PLUG
-    glade_register_widget (GTK_TYPE_PLUG, NULL,
+    glade_register_object (GTK_TYPE_PLUG, NULL,
 			   NULL, NULL);
 #endif
-    glade_register_widget (GTK_TYPE_PROGRESS_BAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_PROGRESS_BAR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_RADIO_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_RADIO_BUTTON, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_RADIO_MENU_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_RADIO_MENU_ITEM, 
 			   menuitem_build_children, NULL);
-    glade_register_widget (GTK_TYPE_RADIO_TOOL_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_RADIO_TOOL_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_SCROLLED_WINDOW, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_SCROLLED_WINDOW, 
 			   glade_standard_build_children,
 			   scrolled_window_find_internal_child);
-    glade_register_widget (GTK_TYPE_SEPARATOR_MENU_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_SEPARATOR_MENU_ITEM, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_SEPARATOR_TOOL_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_SEPARATOR_TOOL_ITEM, 
 			   NULL, NULL);
 #ifdef HAVE_GTK_PLUG
-    glade_register_widget (GTK_TYPE_SOCKET, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_SOCKET, 
 			   NULL, NULL);
 #endif
-    glade_register_widget (GTK_TYPE_SPIN_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_SPIN_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_STATUSBAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_STATUSBAR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_TABLE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TABLE, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_TEAROFF_MENU_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TEAROFF_MENU_ITEM, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_TEXT_VIEW, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TEXT_VIEW, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_TOGGLE_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TOGGLE_BUTTON, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_TOGGLE_TOOL_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TOGGLE_TOOL_BUTTON, 
 			   NULL, NULL);
 #if 0
-    glade_register_widget (GTK_TYPE_TOOLBAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TOOLBAR, 
 			   toolbar_build_children, NULL);
 #endif    
-    glade_register_widget (GTK_TYPE_TOOL_ITEM, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TOOL_ITEM, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_TOOL_BUTTON, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TOOL_BUTTON, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_TREE_VIEW, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_TREE_VIEW, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_VBUTTON_BOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VBUTTON_BOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_VBOX, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VBOX, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_VPANED, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VPANED, 
 			   paned_build_children, NULL);
-    glade_register_widget (GTK_TYPE_VRULER, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VRULER, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_VSCALE, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VSCALE, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_VSCROLLBAR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VSCROLLBAR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_VSEPARATOR, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VSEPARATOR, 
 			   NULL, NULL);
-    glade_register_widget (GTK_TYPE_VIEWPORT, glade_standard_build_widget,
+    glade_register_object (GTK_TYPE_VIEWPORT, 
 			   glade_standard_build_children, NULL);
-    glade_register_widget (GTK_TYPE_WINDOW, NULL,
+    glade_register_object (GTK_TYPE_WINDOW, 
 			   glade_standard_build_children, NULL);
 
     /* glade_provide("gtk"); */

Modified: libglade/glade-parser.c
===================================================================
--- libglade/glade-parser.c	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-parser.c	2005-03-30 19:07:43 UTC (rev 239)
@@ -42,24 +42,24 @@
     PARSER_START,
     PARSER_GLADE_INTERFACE,
     PARSER_REQUIRES,
-    PARSER_WIDGET,
-    PARSER_WIDGET_PROPERTY,
-    PARSER_WIDGET_ATK,
-    PARSER_WIDGET_ATK_PROPERTY,
-    PARSER_WIDGET_ATK_ACTION,
-    PARSER_WIDGET_ATK_RELATION,
-    PARSER_WIDGET_AFTER_ATK,
-    PARSER_WIDGET_SIGNAL,
-    PARSER_WIDGET_AFTER_SIGNAL,
-    PARSER_WIDGET_ACCEL,
-    PARSER_WIDGET_AFTER_ACCEL,
-    PARSER_WIDGET_CHILD,
-    PARSER_WIDGET_CHILD_AFTER_WIDGET,
-    PARSER_WIDGET_CHILD_PACKING,
-    PARSER_WIDGET_CHILD_PACKING_PROPERTY,
-    PARSER_WIDGET_CHILD_AFTER_PACKING,
-    PARSER_WIDGET_CHILD_PLACEHOLDER,
-    PARSER_WIDGET_CHILD_AFTER_PLACEHOLDER,
+    PARSER_OBJECT,
+    PARSER_OBJECT_PROPERTY,
+    PARSER_OBJECT_ATK,
+    PARSER_OBJECT_ATK_PROPERTY,
+    PARSER_OBJECT_ATK_ACTION,
+    PARSER_OBJECT_ATK_RELATION,
+    PARSER_OBJECT_AFTER_ATK,
+    PARSER_OBJECT_SIGNAL,
+    PARSER_OBJECT_AFTER_SIGNAL,
+    PARSER_OBJECT_ACCEL,
+    PARSER_OBJECT_AFTER_ACCEL,
+    PARSER_OBJECT_CHILD,
+    PARSER_OBJECT_CHILD_AFTER_OBJECT,
+    PARSER_OBJECT_CHILD_PACKING,
+    PARSER_OBJECT_CHILD_PACKING_PROPERTY,
+    PARSER_OBJECT_CHILD_AFTER_PACKING,
+    PARSER_OBJECT_CHILD_PLACEHOLDER,
+    PARSER_OBJECT_CHILD_AFTER_PLACEHOLDER,
     PARSER_FINISH,
     PARSER_UNKNOWN
 } ParserState;
@@ -69,24 +69,24 @@
     "START",
     "GLADE_INTERFACE",
     "REQUIRES",
-    "WIDGET",
-    "WIDGET_PROPERTY",
-    "WIDGET_ATK",
-    "WIDGET_ATK_PROPERTY",
-    "WIDGET_ATK_ACTION",
-    "WIDGET_ATK_RELATION",
-    "WIDGET_AFTER_ATK",
-    "WIDGET_SIGNAL",
-    "WIDGET_AFTER_SIGNAL",
-    "WIDGET_ACCEL",
-    "WIDGET_AFTER_ACCEL",
-    "WIDGET_CHILD",
-    "WIDGET_CHILD_AFTER_WIDGET",
-    "WIDGET_CHILD_PACKING",
-    "WIDGET_CHILD_PACKING_PROPERTY",
-    "WIDGET_CHILD_AFTER_PACKING",
-    "WIDGET_CHILD_PLACEHOLDER",
-    "WIDGET_CHILD_AFTER_PLACEHOLDER",
+    "OBJECT",
+    "OBJECT_PROPERTY",
+    "OBJECT_ATK",
+    "OBJECT_ATK_PROPERTY",
+    "OBJECT_ATK_ACTION",
+    "OBJECT_ATK_RELATION",
+    "OBJECT_AFTER_ATK",
+    "OBJECT_SIGNAL",
+    "OBJECT_AFTER_SIGNAL",
+    "OBJECT_ACCEL",
+    "OBJECT_AFTER_ACCEL",
+    "OBJECT_CHILD",
+    "OBJECT_CHILD_AFTER_OBJECT",
+    "OBJECT_CHILD_PACKING",
+    "OBJECT_CHILD_PACKING_PROPERTY",
+    "OBJECT_CHILD_AFTER_PACKING",
+    "OBJECT_CHILD_PLACEHOLDER",
+    "OBJECT_CHILD_AFTER_PLACEHOLDER",
     "FINISH",
     "UNKNOWN",
 };
@@ -101,13 +101,13 @@
     guint unknown_depth;    /* handle recursive unrecognised tags */
     ParserState prev_state; /* the last `known' state we were in */
 
-    guint widget_depth;
+    guint object_depth;
     GString *content;
 
     GladeInterface *interface;
-    GladeWidgetInfo *widget;
+    GladeObjectInfo *object;
 
-    enum {PROP_NONE, PROP_WIDGET, PROP_ATK, PROP_CHILD } prop_type;
+    enum {PROP_NONE, PROP_OBJECT, PROP_ATK, PROP_CHILD } prop_type;
     gchar *prop_name;
     gboolean translate_prop;
     gboolean context_prop;
@@ -151,12 +151,12 @@
     return alloc_string(interface, norm_str->str);
 }
 
-static GladeWidgetInfo *
-create_widget_info(GladeInterface *interface,
+static GladeObjectInfo *
+create_object_info(GladeInterface *interface,
 		   const gchar   **names,
 		   const gchar   **values)
 {
-    GladeWidgetInfo *info = g_new0(GladeWidgetInfo, 1);
+    GladeObjectInfo *info = g_new0(GladeObjectInfo, 1);
     int i;
 
     for (i = 0; names && names[i] != NULL; i++) {
@@ -165,10 +165,10 @@
 	else if (!strcmp(names[i], "id"))
 	    info->name = alloc_string(interface, values[i]);
 	else
-	    g_warning("unknown attribute `%s' for <widget>.", names[i]);
+	    g_warning("unknown attribute `%s' for <object>.", names[i]);
     }
     if (info->classname == NULL || info->name == NULL)
-	g_warning("<widget> element missing required attributes!");
+	g_warning("<object> element missing required attributes!");
     g_hash_table_insert(interface->names, info->name, info);
     return info;
 }
@@ -181,27 +181,27 @@
     switch (state->prop_type) {
     case PROP_NONE:
 	break;
-    case PROP_WIDGET:
-	if (state->widget->properties)
+    case PROP_OBJECT:
+	if (state->object->properties)
 	    g_warning("we already read all the props for this key.  Leaking");
-	state->widget->properties = (GladeProperty *)state->props->data;
-	state->widget->n_properties = state->props->len;
+	state->object->properties = (GladeProperty *)state->props->data;
+	state->object->n_properties = state->props->len;
 	g_array_free(state->props, FALSE);
 	break;
     case PROP_ATK:
-	if (state->widget->atk_props)
+	if (state->object->atk_props)
 	    g_warning("we already read all the ATK props for this key.  Leaking");
-	state->widget->atk_props = (GladeProperty *)state->props->data;
-	state->widget->n_atk_props = state->props->len;
+	state->object->atk_props = (GladeProperty *)state->props->data;
+	state->object->n_atk_props = state->props->len;
 	g_array_free(state->props, FALSE);
 	break;
     case PROP_CHILD:
-	if (state->widget->n_children == 0) {
+	if (state->object->n_children == 0) {
 	    g_warning("no children, but have child properties!");
 	    g_array_free(state->props, TRUE);
 	} else {
-	    GladeChildInfo *info = &state->widget->children[
-						state->widget->n_children-1];
+	    GladeChildInfo *info = &state->object->children[
+						state->object->n_children-1];
 	    if (info->properties)
 		g_warning("we already read all the child props for this key.  Leaking");
 	    info->properties = (GladeProperty *)state->props->data;
@@ -219,8 +219,8 @@
 flush_signals(GladeParseState *state)
 {
     if (state->signals) {
-	state->widget->signals = (GladeSignalInfo *)state->signals->data;
-	state->widget->n_signals = state->signals->len;
+	state->object->signals = (GladeSignalInfo *)state->signals->data;
+	state->object->n_signals = state->signals->len;
 	g_array_free(state->signals, FALSE);
     }
     state->signals = NULL;
@@ -230,8 +230,8 @@
 flush_actions(GladeParseState *state)
 {
     if (state->atk_actions) {
-	state->widget->atk_actions = (GladeAtkActionInfo *)state->atk_actions->data;
-	state->widget->n_atk_actions = state->atk_actions->len;
+	state->object->atk_actions = (GladeAtkActionInfo *)state->atk_actions->data;
+	state->object->n_atk_actions = state->atk_actions->len;
 	g_array_free(state->atk_actions, FALSE);
     }
     state->atk_actions = NULL;
@@ -241,8 +241,8 @@
 flush_relations(GladeParseState *state)
 {
     if (state->relations) {
-	state->widget->relations = (GladeAtkRelationInfo *)state->relations->data;
-	state->widget->n_relations = state->relations->len;
+	state->object->relations = (GladeAtkRelationInfo *)state->relations->data;
+	state->object->n_relations = state->relations->len;
 	g_array_free(state->relations, FALSE);
     }
     state->relations = NULL;
@@ -252,8 +252,8 @@
 flush_accels(GladeParseState *state)
 {
     if (state->accels) {
-	state->widget->accels = (GladeAccelInfo *)state->accels->data;
-	state->widget->n_accels = state->accels->len;
+	state->object->accels = (GladeAccelInfo *)state->accels->data;
+	state->object->n_accels = state->accels->len;
 	g_array_free(state->accels, FALSE);
     }
     state->accels = NULL;
@@ -450,10 +450,10 @@
     flush_relations(state);
     flush_accels(state);
 
-    state->widget->n_children++;
-    state->widget->children = g_renew(GladeChildInfo, state->widget->children,
-				      state->widget->n_children);
-    info = &state->widget->children[state->widget->n_children-1];
+    state->object->n_children++;
+    state->object->children = g_renew(GladeChildInfo, state->object->children,
+				      state->object->n_children);
+    info = &state->object->children[state->object->n_children-1];
     info->internal_child = NULL;
     info->properties = NULL;
     info->n_properties = 0;
@@ -475,7 +475,7 @@
     state->unknown_depth = 0;
     state->prev_state = PARSER_UNKNOWN;
 
-    state->widget_depth = 0;
+    state->object_depth = 0;
     state->content = g_string_sized_new(128);
 
     state->interface = g_new0(GladeInterface, 1);
@@ -484,7 +484,7 @@
 						      g_str_equal,
 						      (GDestroyNotify)g_free,
 						      NULL);
-    state->widget = NULL;
+    state->object = NULL;
 
     state->prop_type = PROP_NONE;
     state->prop_name = NULL;
@@ -502,8 +502,8 @@
 
     if (state->unknown_depth != 0)
 	g_warning("unknown_depth != 0 (%d)", state->unknown_depth);
-    if (state->widget_depth != 0)
-	g_warning("widget_depth != 0 (%d)", state->widget_depth);
+    if (state->object_depth != 0)
+	g_warning("object_depth != 0 (%d)", state->object_depth);
 }
 
 static void
@@ -560,23 +560,23 @@
 			      names[i]);
 	    }
 	    state->state = PARSER_REQUIRES;
-	} else if (!strcmp(name, "widget")) {
+	} else if (!strcmp(name, "object")) {
 	    GladeInterface *iface = state->interface;
 
 	    iface->n_toplevels++;
-	    iface->toplevels = g_renew(GladeWidgetInfo *, iface->toplevels,
+	    iface->toplevels = g_renew(GladeObjectInfo *, iface->toplevels,
 				       iface->n_toplevels);
-	    state->widget = create_widget_info(iface, names, values);
-	    iface->toplevels[iface->n_toplevels-1] = state->widget;
+	    state->object = create_object_info(iface, names, values);
+	    iface->toplevels[iface->n_toplevels-1] = state->object;
 
-	    state->widget_depth++;
+	    state->object_depth++;
 	    state->prop_type = PROP_NONE;
 	    state->prop_name = NULL;
 	    state->props = NULL;
 	    state->signals = NULL;
 	    state->accels = NULL;
 
-	    state->state = PARSER_WIDGET;
+	    state->state = PARSER_OBJECT;
 	} else {
 	    g_warning("Unexpected element <%s> inside <glade-interface>.",
 		      name);
@@ -591,13 +591,13 @@
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET:
+    case PARSER_OBJECT:
 	if (!strcmp(name, "property")) {
 	    gboolean bad_agent = FALSE;
 
 	    if (state->prop_type != PROP_NONE &&
-		state->prop_type != PROP_WIDGET)
-		g_warning("non widget properties defined here (oh no!)");
+		state->prop_type != PROP_OBJECT)
+		g_warning("non object properties defined here (oh no!)");
 	    state->translate_prop = FALSE;
 		for (i = 0; names && names[i] != NULL; i++) {
 			if (!strcmp(names[i], "name"))
@@ -619,38 +619,38 @@
 		state->state = PARSER_UNKNOWN;
 		state->unknown_depth++;
 	    } else {
-		state->prop_type = PROP_WIDGET;
-		state->state = PARSER_WIDGET_PROPERTY;
+		state->prop_type = PROP_OBJECT;
+		state->state = PARSER_OBJECT_PROPERTY;
 	    }
 	} else if (!strcmp(name, "accessibility")) {
 	    flush_properties(state);
 
 	    if (names != NULL && names[0] != NULL)
 		g_warning("<accessibility> element should have no attributes");
-	    state->state = PARSER_WIDGET_ATK;
+	    state->state = PARSER_OBJECT_ATK;
 	} else if (!strcmp(name, "signal")) {
 	    handle_signal(state, names, values);
-	    state->state = PARSER_WIDGET_SIGNAL;
+	    state->state = PARSER_OBJECT_SIGNAL;
 	} else if (!strcmp(name, "accelerator")) {
 	    handle_accel(state, names, values);
-	    state->state = PARSER_WIDGET_ACCEL;
+	    state->state = PARSER_OBJECT_ACCEL;
 	} else if (!strcmp(name, "child")) {
 	    handle_child(state, names, values);
-	    state->state = PARSER_WIDGET_CHILD;
+	    state->state = PARSER_OBJECT_CHILD;
 	} else {
-	    g_warning("Unexpected element <%s> inside <widget>.", name);
+	    g_warning("Unexpected element <%s> inside <object>.", name);
 	    state->prev_state = state->state;
 	    state->state = PARSER_UNKNOWN;
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_PROPERTY:
+    case PARSER_OBJECT_PROPERTY:
 	g_warning("<property> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_ATK:
+    case PARSER_OBJECT_ATK:
 	if (!strcmp(name, "atkproperty")) {
 	    if (state->prop_type != PROP_NONE &&
 		state->prop_type != PROP_ATK)
@@ -671,13 +671,13 @@
 		    g_warning("unknown attribute `%s' for <atkproperty>.",
 			      names[i]);
 	    }
-	    state->state = PARSER_WIDGET_ATK_PROPERTY;
+	    state->state = PARSER_OBJECT_ATK_PROPERTY;
 	} else if (!strcmp(name, "atkaction")) {
 	    handle_atk_action(state, names, values);
-	    state->state = PARSER_WIDGET_ATK_ACTION;
+	    state->state = PARSER_OBJECT_ATK_ACTION;
 	} else if (!strcmp(name, "atkrelation")) {
 	    handle_atk_relation(state, names, values);
-	    state->state = PARSER_WIDGET_ATK_RELATION;
+	    state->state = PARSER_OBJECT_ATK_RELATION;
 	} else {
 	    g_warning("Unexpected element <%s> inside <accessibility>.", name);
 	    state->prev_state = state->state;
@@ -685,9 +685,9 @@
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_ATK_PROPERTY:
+    case PARSER_OBJECT_ATK_PROPERTY:
 	if (!strcmp(name, "accessibility")) {
-	    state->state = PARSER_WIDGET_ATK;
+	    state->state = PARSER_OBJECT_ATK;
 	} else {
 	    g_warning("Unexpected element <%s> inside <atkproperty>.", name);
 	    state->prev_state = state->state;
@@ -695,96 +695,96 @@
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_ATK_ACTION:
+    case PARSER_OBJECT_ATK_ACTION:
 	g_warning("<atkaction> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_ATK_RELATION:
+    case PARSER_OBJECT_ATK_RELATION:
 	g_warning("<atkrelation> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_AFTER_ATK:
+    case PARSER_OBJECT_AFTER_ATK:
 	if (!strcmp(name, "signal")) {
 	    handle_signal(state, names, values);
-	    state->state = PARSER_WIDGET_SIGNAL;
+	    state->state = PARSER_OBJECT_SIGNAL;
 	} else if (!strcmp(name, "accelerator")) {
 	    handle_accel(state, names, values);
-	    state->state = PARSER_WIDGET_ACCEL;
+	    state->state = PARSER_OBJECT_ACCEL;
 	} else if (!strcmp(name, "child")) {
 	    handle_child(state, names, values);
-	    state->state = PARSER_WIDGET_CHILD;
+	    state->state = PARSER_OBJECT_CHILD;
 	} else {
-	    g_warning("Unexpected element <%s> inside <widget>.", name);
+	    g_warning("Unexpected element <%s> inside <object>.", name);
 	    state->prev_state = state->state;
 	    state->state = PARSER_UNKNOWN;
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_SIGNAL:
+    case PARSER_OBJECT_SIGNAL:
 	g_warning("<signal> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_AFTER_SIGNAL:
+    case PARSER_OBJECT_AFTER_SIGNAL:
 	if (!strcmp(name, "accelerator")) {
 	    handle_accel(state, names, values);
-	    state->state = PARSER_WIDGET_ACCEL;
+	    state->state = PARSER_OBJECT_ACCEL;
 	} else if (!strcmp(name, "child")) {
 	    handle_child(state, names, values);
-	    state->state = PARSER_WIDGET_CHILD;
+	    state->state = PARSER_OBJECT_CHILD;
 	} else {
-	    g_warning("Unexpected element <%s> inside <widget>.", name);
+	    g_warning("Unexpected element <%s> inside <object>.", name);
 	    state->prev_state = state->state;
 	    state->state = PARSER_UNKNOWN;
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_ACCEL:
+    case PARSER_OBJECT_ACCEL:
 	g_warning("<accelerator> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_AFTER_ACCEL:
+    case PARSER_OBJECT_AFTER_ACCEL:
 	if (!strcmp(name, "child")) {
 	    handle_child(state, names, values);
-	    state->state = PARSER_WIDGET_CHILD;
+	    state->state = PARSER_OBJECT_CHILD;
 	} else {
-	    g_warning("Unexpected element <%s> inside <widget>.", name);
+	    g_warning("Unexpected element <%s> inside <object>.", name);
 	    state->prev_state = state->state;
 	    state->state = PARSER_UNKNOWN;
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_CHILD:
-	if (!strcmp(name, "widget")) {
-	    GladeWidgetInfo *parent = state->widget;
+    case PARSER_OBJECT_CHILD:
+	if (!strcmp(name, "object")) {
+	    GladeObjectInfo *parent = state->object;
 	    GladeChildInfo *info = &parent->children[parent->n_children-1];
 
 	    if (info->child)
-		g_warning("widget pointer already set!! not good");
+		g_warning("object pointer already set!! not good");
 
-	    state->widget = create_widget_info(state->interface, names, values);
-	    info->child = state->widget;
+	    state->object = create_object_info(state->interface, names, values);
+	    info->child = state->object;
 	    info->child->parent = parent;
 
-	    state->widget_depth++;
+	    state->object_depth++;
 	    state->prop_type = PROP_NONE;
 	    state->prop_name = NULL;
 	    state->props = NULL;
 	    state->signals = NULL;
 	    state->accels = NULL;
 
-	    state->state = PARSER_WIDGET;
+	    state->state = PARSER_OBJECT;
 	} else if (!strcmp(name, "placeholder")) {
 	    /* this isn't a real child, so knock off  the last ChildInfo */
-	    state->widget->n_children--;
-	    state->state = PARSER_WIDGET_CHILD_PLACEHOLDER;
+	    state->object->n_children--;
+	    state->state = PARSER_OBJECT_CHILD_PLACEHOLDER;
 	} else {
 	    g_warning("Unexpected element <%s> inside <child>.", name);
 	    state->prev_state = state->state;
@@ -792,9 +792,9 @@
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_WIDGET:
+    case PARSER_OBJECT_CHILD_AFTER_OBJECT:
 	if (!strcmp(name, "packing")) {
-	    state->state = PARSER_WIDGET_CHILD_PACKING;
+	    state->state = PARSER_OBJECT_CHILD_PACKING;
 	} else {
 	    g_warning("Unexpected element <%s> inside <child>.", name);
 	    state->prev_state = state->state;
@@ -802,7 +802,7 @@
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_CHILD_PACKING:
+    case PARSER_OBJECT_CHILD_PACKING:
 	if (!strcmp(name, "property")) {
 	    gboolean bad_agent = FALSE;
 
@@ -833,7 +833,7 @@
 		state->unknown_depth++;
 	    } else {
 		state->prop_type = PROP_CHILD;
-		state->state = PARSER_WIDGET_CHILD_PACKING_PROPERTY;
+		state->state = PARSER_OBJECT_CHILD_PACKING_PROPERTY;
 	    }
 	} else {
 	    g_warning("Unexpected element <%s> inside <child>.", name);
@@ -842,25 +842,25 @@
 	    state->unknown_depth++;
 	}
 	break;
-    case PARSER_WIDGET_CHILD_PACKING_PROPERTY:
+    case PARSER_OBJECT_CHILD_PACKING_PROPERTY:
 	g_warning("<property> element should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_PACKING:
+    case PARSER_OBJECT_CHILD_AFTER_PACKING:
 	g_warning("<child> should have no elements after <packing>.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_CHILD_PLACEHOLDER:
+    case PARSER_OBJECT_CHILD_PLACEHOLDER:
 	g_warning("<placeholder> should be empty.  Found <%s>.", name);
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
 	state->unknown_depth++;
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_PLACEHOLDER:
+    case PARSER_OBJECT_CHILD_AFTER_PLACEHOLDER:
 	/* this is a placeholder <child> element -- ignore extra elements */
 	state->prev_state = state->state;
 	state->state = PARSER_UNKNOWN;
@@ -908,26 +908,26 @@
 	    g_warning("should find </requires> here.  Found </%s>", name);
 	state->state = PARSER_GLADE_INTERFACE;
 	break;
-    case PARSER_WIDGET:
-    case PARSER_WIDGET_AFTER_ATK:
-    case PARSER_WIDGET_AFTER_SIGNAL:
-    case PARSER_WIDGET_AFTER_ACCEL:
-	if (strcmp(name, "widget") != 0)
-	    g_warning("should find </widget> here.  Found </%s>", name);
+    case PARSER_OBJECT:
+    case PARSER_OBJECT_AFTER_ATK:
+    case PARSER_OBJECT_AFTER_SIGNAL:
+    case PARSER_OBJECT_AFTER_ACCEL:
+	if (strcmp(name, "object") != 0)
+	    g_warning("should find </object> here.  Found </%s>", name);
 	flush_properties(state);
 	flush_signals(state);
 	flush_actions(state);
 	flush_relations(state);
 	flush_accels(state);
-	state->widget = state->widget->parent;
-	state->widget_depth--;
+	state->object = state->object->parent;
+	state->object_depth--;
 
-	if (state->widget_depth == 0)
+	if (state->object_depth == 0)
 	    state->state = PARSER_GLADE_INTERFACE;
 	else
-	    state->state = PARSER_WIDGET_CHILD_AFTER_WIDGET;
+	    state->state = PARSER_OBJECT_CHILD_AFTER_OBJECT;
 	break;
-    case PARSER_WIDGET_PROPERTY:
+    case PARSER_OBJECT_PROPERTY:
 	if (strcmp(name, "property") != 0)
 	    g_warning("should find </property> here.  Found </%s>", name);
 	if (!state->props)
@@ -946,15 +946,15 @@
   	}
 	g_array_append_val(state->props, prop);
 	state->prop_name = NULL;
-	state->state = PARSER_WIDGET;
+	state->state = PARSER_OBJECT;
 	break;
-    case PARSER_WIDGET_ATK:
+    case PARSER_OBJECT_ATK:
 	if (strcmp(name, "accessibility") != 0)
 	    g_warning("should find </accessibility> here.  Found </%s>", name);
 	flush_properties(state); /* flush the ATK properties */
-	state->state = PARSER_WIDGET_AFTER_ATK;
+	state->state = PARSER_OBJECT_AFTER_ATK;
 	break;
-    case PARSER_WIDGET_ATK_PROPERTY:
+    case PARSER_OBJECT_ATK_PROPERTY:
 	if (strcmp(name, "atkproperty") != 0)
 	    g_warning("should find </atkproperty> here.  Found </%s>", name);
 	if (!state->props)
@@ -973,55 +973,55 @@
   	}
 	g_array_append_val(state->props, prop);
 	state->prop_name = NULL;
-	state->state = PARSER_WIDGET_ATK;
+	state->state = PARSER_OBJECT_ATK;
 	break;
-    case PARSER_WIDGET_ATK_ACTION:
+    case PARSER_OBJECT_ATK_ACTION:
 	if (strcmp(name, "atkaction") != 0)
 	    g_warning("should find </atkaction> here.  Found </%s>", name);
         state->prop_name = NULL;
-        state->state = PARSER_WIDGET_ATK;
+        state->state = PARSER_OBJECT_ATK;
         break;
-    case PARSER_WIDGET_ATK_RELATION:
+    case PARSER_OBJECT_ATK_RELATION:
 	if (strcmp(name, "atkrelation") != 0)
 	    g_warning("should find </atkrelation> here.  Found </%s>", name);
         state->prop_name = NULL;
-        state->state = PARSER_WIDGET_ATK;
+        state->state = PARSER_OBJECT_ATK;
         break;
-    case PARSER_WIDGET_SIGNAL:
+    case PARSER_OBJECT_SIGNAL:
 	if (strcmp(name, "signal") != 0)
 	    g_warning("should find </signal> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_AFTER_ATK;
+	state->state = PARSER_OBJECT_AFTER_ATK;
 	break;
-    case PARSER_WIDGET_ACCEL:
+    case PARSER_OBJECT_ACCEL:
 	if (strcmp(name, "accelerator") != 0)
 	    g_warning("should find </accelerator> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_AFTER_SIGNAL;
+	state->state = PARSER_OBJECT_AFTER_SIGNAL;
 	break;
-    case PARSER_WIDGET_CHILD:
+    case PARSER_OBJECT_CHILD:
 	if (strcmp(name, "child") != 0)
 	    g_warning("should find </child> here.  Found </%s>", name);
 	/* if we are ending the element in this state, then there
-	 * hasn't been a <widget> element inside this <child>
+	 * hasn't been a <object> element inside this <child>
 	 * element. (If there was, then we would be in
-	 * PARSER_WIDGET_CHILD_AFTER_WIDGET state. */
-	g_warning("no <widget> element found inside <child>.  Discarding");
-	g_free(state->widget->children[
-			state->widget->n_children-1].properties);
-	state->widget->n_children--;
-	state->state = PARSER_WIDGET_AFTER_ACCEL;
+	 * PARSER_OBJECT_CHILD_AFTER_OBJECT state. */
+	g_warning("no <object> element found inside <child>.  Discarding");
+	g_free(state->object->children[
+			state->object->n_children-1].properties);
+	state->object->n_children--;
+	state->state = PARSER_OBJECT_AFTER_ACCEL;
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_WIDGET:
+    case PARSER_OBJECT_CHILD_AFTER_OBJECT:
 	if (strcmp(name, "child") != 0)
 	    g_warning("should find </child> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_AFTER_ACCEL;
+	state->state = PARSER_OBJECT_AFTER_ACCEL;
 	break;
-    case PARSER_WIDGET_CHILD_PACKING:
+    case PARSER_OBJECT_CHILD_PACKING:
 	if (strcmp(name, "packing") != 0)
 	    g_warning("should find </packing> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_CHILD_AFTER_PACKING;
+	state->state = PARSER_OBJECT_CHILD_AFTER_PACKING;
 	flush_properties(state); /* flush the properties. */
 	break;
-    case PARSER_WIDGET_CHILD_PACKING_PROPERTY:
+    case PARSER_OBJECT_CHILD_PACKING_PROPERTY:
 	if (strcmp(name, "property") != 0)
 	    g_warning("should find </property> here.  Found </%s>", name);
 	if (!state->props)
@@ -1040,22 +1040,22 @@
   	}
 	g_array_append_val(state->props, prop);
 	state->prop_name = NULL;
-	state->state = PARSER_WIDGET_CHILD_PACKING;
+	state->state = PARSER_OBJECT_CHILD_PACKING;
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_PACKING:
+    case PARSER_OBJECT_CHILD_AFTER_PACKING:
 	if (strcmp(name, "child") != 0)
 	    g_warning("should find </child> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_AFTER_ACCEL;
+	state->state = PARSER_OBJECT_AFTER_ACCEL;
 	break;
-    case PARSER_WIDGET_CHILD_PLACEHOLDER:
+    case PARSER_OBJECT_CHILD_PLACEHOLDER:
 	if (strcmp(name, "placeholder") != 0)
 	    g_warning("should find </placeholder> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_CHILD_AFTER_PLACEHOLDER;
+	state->state = PARSER_OBJECT_CHILD_AFTER_PLACEHOLDER;
 	break;
-    case PARSER_WIDGET_CHILD_AFTER_PLACEHOLDER:
+    case PARSER_OBJECT_CHILD_AFTER_PLACEHOLDER:
 	if (strcmp(name, "child") != 0)
 	    g_warning("should find </child> here.  Found </%s>", name);
-	state->state = PARSER_WIDGET_AFTER_ACCEL;
+	state->state = PARSER_OBJECT_AFTER_ACCEL;
 	break;
     case PARSER_FINISH:
 	g_warning("should not be closing any elements in this state");
@@ -1076,9 +1076,9 @@
 		  GError             **error)
 {
     switch (state->state) {
-    case PARSER_WIDGET_PROPERTY:
-    case PARSER_WIDGET_ATK_PROPERTY:
-    case PARSER_WIDGET_CHILD_PACKING_PROPERTY:
+    case PARSER_OBJECT_PROPERTY:
+    case PARSER_OBJECT_ATK_PROPERTY:
+    case PARSER_OBJECT_CHILD_PACKING_PROPERTY:
 	g_string_append_len(state->content, chars, len);
 	break;
     default:
@@ -1104,7 +1104,7 @@
 };
 
 static void
-widget_info_free(GladeWidgetInfo *info)
+object_info_free(GladeObjectInfo *info)
 {
     gint i;
 
@@ -1119,7 +1119,7 @@
 
     for (i = 0; i < info->n_children; i++) {
 	g_free(info->children[i].properties);
-	widget_info_free(info->children[i].child);
+	object_info_free(info->children[i].child);
     }
     g_free(info->children);
     g_free(info);
@@ -1142,7 +1142,7 @@
     g_free(interface->requires);
 
     for (i = 0; i < interface->n_toplevels; i++)
-	widget_info_free(interface->toplevels[i]);
+	object_info_free(interface->toplevels[i]);
     g_free(interface->toplevels);
 
     g_hash_table_destroy(interface->names);
@@ -1251,127 +1251,7 @@
     return state.interface;
 }
 
-#if 0
-static void
-dump_widget(xmlNode *parent, GladeWidgetInfo *info, gint indent)
-{
-    xmlNode *widget = xmlNewNode(NULL, "widget");
-    gint i, j;
 
-    xmlSetProp(widget, "class", info->classname);
-    xmlSetProp(widget, "id", info->name);
-    xmlAddChild(parent, widget);
-    xmlNodeAddContent(widget, "\n");
-
-    for (i = 0; i < info->n_properties; i++) { 
-	xmlNode *node;
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(widget, "  ");
-	node = xmlNewNode(NULL, "property");
-	xmlSetProp(node, "name", info->properties[i].name);
-	xmlNodeSetContent(node, info->properties[i].value);
-	xmlAddChild(widget, node);
-	xmlNodeAddContent(widget, "\n");
-    }
-
-    if (info->n_atk_props != 0) {
-	xmlNode *atk;
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(widget, "  ");
-	atk = xmlNewNode(NULL, "accessibility");
-	xmlAddChild(widget, atk);
-	xmlNodeAddContent(widget, "\n");
-	xmlNodeAddContent(atk, "\n");
-
-	for (i = 0; i < info->n_atk_props; i++) {
-	    xmlNode *node;
-
-	    for (j = 0; j < indent + 2; j++)
-		xmlNodeAddContent(atk, "  ");
-	    node = xmlNewNode(NULL, "property");
-	    xmlSetProp(node, "name", info->atk_props[i].name);
-	    xmlNodeSetContent(node, info->atk_props[i].value);
-	    xmlAddChild(atk, node);
-	    xmlNodeAddContent(atk, "\n");
-	}
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(atk, "  ");
-    }
-
-    for (i = 0; i < info->n_signals; i++) {
-	xmlNode *node;
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(widget, "  ");
-
-	node = xmlNewNode(NULL, "signal");
-	xmlSetProp(node, "name", info->signals[i].name);
-	xmlSetProp(node, "handler", info->signals[i].handler);
-	if (info->signals[i].after)
-	    xmlSetProp(node, "after", "yes");
-	if (info->signals[i].object)
-	    xmlSetProp(node, "object", info->signals[i].object);
-	xmlAddChild(widget, node);
-	xmlNodeAddContent(widget, "\n");
-    }
-
-    for (i = 0; i < info->n_accels; i++) {
-	xmlNode *node;
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(widget, "  ");
-
-	node = xmlNewNode(NULL, "accelerator");
-	xmlSetProp(node, "key", gdk_keyval_name(info->accels[i].key));
-	xmlSetProp(node, "modifier", "something"/*info->accels[i].modifiers*/);
-	xmlSetProp(node, "signal", info->accels[i].signal);
-	xmlAddChild(widget, node);
-	xmlNodeAddContent(widget, "\n");
-    }
-
-    for (i = 0; i < info->n_children; i++) {
-	xmlNode *child;
-	GladeChildInfo *childinfo = &info->children[i];
-	gint k;
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(widget, "  ");
-
-	child = xmlNewNode(NULL, "child");
-	if (childinfo->internal_child)
-	    xmlSetProp(child, "internal-child", childinfo->internal_child);
-	xmlAddChild(widget, child);
-	xmlNodeAddContent(widget, "\n");
-	xmlNodeAddContent(child, "\n");
-
-	for (k = 0; k < childinfo->n_properties; k++) { 
-	    xmlNode *node;
-
-	    for (j = 0; j < indent + 2; j++)
-		xmlNodeAddContent(child, "  ");
-	    node = xmlNewNode(NULL, "property");
-	    xmlSetProp(node, "name", childinfo->properties[i].name);
-	    xmlNodeSetContent(node, childinfo->properties[i].value);
-	    xmlAddChild(child, node);
-	    xmlNodeAddContent(child, "\n");
-	}
-
-	for (j = 0; j < indent + 2; j++)
-	    xmlNodeAddContent(child, "  ");
-	dump_widget(child, childinfo->child, indent + 2);
-	xmlNodeAddContent(child, "\n");
-
-	for (j = 0; j < indent + 1; j++)
-	    xmlNodeAddContent(child, "  ");
-    }
-
-    for (j = 0; j < indent; j++)
-	xmlNodeAddContent(widget, "  ");
-}
-#endif
-
 /**
  * glade_interface_dump
  * @interface: the GladeInterface
@@ -1383,56 +1263,4 @@
 void
 glade_interface_dump(GladeInterface *interface, const gchar *filename)
 {
-#if 0
-    xmlDoc *doc;
-    xmlNode *root;
-    gint i;
-
-    doc = xmlNewDoc("1.0");
-    doc->standalone = FALSE;
-    xmlCreateIntSubset(doc, "glade-interface",
-		       NULL, "glade-2.0.dtd");
-    root = xmlNewNode(NULL, "glade-interface");
-    xmlDocSetRootElement(doc, root);
-
-    xmlNodeAddContent(root, "\n");
-
-    for (i = 0; i < interface->n_requires; i++) {
-	xmlNode *node = xmlNewNode(NULL, "requires");
-
-	xmlSetProp(node, "lib", interface->requires[i]);
-
-	xmlNodeAddContent(root, "  ");
-	xmlAddChild(root, node);
-	xmlNodeAddContent(root, "\n");
-    }
-
-    for (i = 0; i < interface->n_toplevels; i++) {
-	xmlNodeAddContent(root, "  ");
-	dump_widget(root, interface->toplevels[i], 1);
-	xmlNodeAddContent(root, "\n");
-    }
-
-    /* output */
-    
-    xmlSaveFileEnc(filename, doc, "UTF-8");
-    xmlFreeDoc(doc);
-#endif
 }
-
-#if 0
-int
-main(int argc, char **argv) {
-    gtk_init(&argc, &argv);
-    if (argc > 1) {
-	GladeInterface *interface = glade_parser_parse_file(argv[1], NULL);
-	g_message("output: %p", interface);
-	if (interface) {
-	    glade_interface_dump(interface, "/dev/stdout");
-	    glade_interface_destroy(interface);
-	}
-    } else
-	g_message("need filename");
-    return 0;
-}
-#endif

Modified: libglade/glade-parser.h
===================================================================
--- libglade/glade-parser.h	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-parser.h	2005-03-30 19:07:43 UTC (rev 239)
@@ -61,11 +61,11 @@
     gchar *signal;
 };
 
-typedef struct _GladeWidgetInfo GladeWidgetInfo;
+typedef struct _GladeObjectInfo GladeObjectInfo;
 typedef struct _GladeChildInfo GladeChildInfo;
 
-struct _GladeWidgetInfo {
-    GladeWidgetInfo *parent;
+struct _GladeObjectInfo {
+    GladeObjectInfo *parent;
 
     gchar *classname;
     gchar *name;
@@ -96,7 +96,7 @@
     GladeProperty *properties;
     guint n_properties;
 
-    GladeWidgetInfo *child;
+    GladeObjectInfo *child;
     gchar *internal_child;
 };
 
@@ -105,7 +105,7 @@
     gchar **requires;
     guint n_requires;
 
-    GladeWidgetInfo **toplevels;
+    GladeObjectInfo **toplevels;
     guint n_toplevels;
 
     GHashTable *names;

Modified: libglade/glade-xml.c
===================================================================
--- libglade/glade-xml.c	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-xml.c	2005-03-30 19:07:43 UTC (rev 239)
@@ -59,13 +59,15 @@
  * properties + parent properties) */
 static const gchar *glade_custom_props_cache_key = "libglade::custom-props-cache";
 static GQuark       glade_custom_props_cache_id  = 0;
+static const gchar *glade_build_parent_key   = "libglade::parent";
+static GQuark       glade_build_parent_id    = 0;
 
 struct _GladeXMLPrivate {
     GladeInterface *tree; /* the tree for this GladeXML */
 
     GtkTooltips *tooltips; /* if not NULL, holds all tooltip info */
 
-    /* hash tables of widgets.  The keys are stored as widget data,
+    /* hash tables of objects.  The keys are stored as object data,
      * and get freed with those widgets. */
     GHashTable *name_hash;
 	
@@ -86,8 +88,8 @@
     GtkWidget *focus_widget;
     GtkWidget *default_widget;
 
-    /* list of GtkWidget properties waiting to be set.  (they couldn't
-     * be set earlier because the value widget hadn't been created
+    /* list of GObject properties waiting to be set.  (they couldn't
+     * be set earlier because the value object hadn't been created
      * yet). */
     GList *deferred_props;
 };
@@ -109,13 +111,8 @@
     gpointer user_data;
 } connect_data_data;
 
-typedef struct {
-    const gchar *name;
-    GList *list;
-} widget_prefix_data;
-
-typedef struct _GladeWidgetBuildData GladeWidgetBuildData;
-struct _GladeWidgetBuildData {
+typedef struct _GladeObjectBuildData GladeObjectBuildData;
+struct _GladeObjectBuildData {
     GladeBuildChildrenFunc build_children;
     GladeFindInternalChildFunc find_internal_child;
 };
@@ -212,12 +209,12 @@
 /**
  * glade_xml_new:
  * @fname: the XML file name.
- * @root: the widget node in @fname to start building from (or %NULL)
+ * @root: the object node in @fname to start building from (or %NULL)
  * @domain: the translation domain for the XML file (or %NULL for default)
  *
- * Creates a new GladeXML object (and the corresponding widgets) from the
+ * Creates a new GladeXML object (and the corresponding objects) from the
  * XML file @fname.  Optionally it will only build the interface from the
- * widget node @root (if it is not %NULL).  This feature is useful if you
+ * object node @root (if it is not %NULL).  This feature is useful if you
  * only want to build say a toolbar or menu from the XML file, but not the
  * window it is embedded in.  Note also that the XML parse tree is cached
  * to speed up creating another GladeXML object for the same file
@@ -254,12 +251,12 @@
  * glade_xml_new_from_buffer:
  * @buffer: the memory buffer containing the XML document.
  * @size: the size of the buffer.
- * @root: the widget node in @buffer to start building from (or %NULL)
+ * @root: the object node in @buffer to start building from (or %NULL)
  * @domain: the translation domain to use for this interface (or %NULL)
  *
- * Creates a new GladeXML object (and the corresponding widgets) from the
+ * Creates a new GladeXML object (and the corresponding objects) from the
  * buffer @buffer.  Optionally it will only build the interface from the
- * widget node @root (if it is not %NULL).  This feature is useful if you
+ * object node @root (if it is not %NULL).  This feature is useful if you
  * only want to build say a toolbar or menu from the XML document, but not the
  * window it is embedded in.
  *
@@ -290,7 +287,7 @@
  * @func: the signal handler function
  *
  * In the glade interface descriptions, signal handlers are specified for
- * widgets by name.  This function allows you to connect a C function to
+ * objects by name.  This function allows you to connect a C function to
  * all signals in the GladeXML file with the given signal handler name.
  */
 void
@@ -339,8 +336,8 @@
 	for (; signals != NULL; signals = signals->next) {
 	    GladeSignalData *data = signals->data;
 	    if (data->connect_object) {
-		GladeXML *self = glade_get_widget_tree(
-					GTK_WIDGET(data->signal_object));
+		GladeXML *self = glade_get_object_tree(
+					G_OBJECT(data->signal_object));
 		GObject *other = g_hash_table_lookup(self->priv->name_hash,
 						       data->connect_object);
 
@@ -400,7 +397,7 @@
 		
 	if (data->connect_object) {
 	    if (!self)
-		self = glade_get_widget_tree(GTK_WIDGET(data->signal_object));
+		self = glade_get_object_tree(G_OBJECT(data->signal_object));
 	    connect_object = g_hash_table_lookup(self->priv->name_hash,
 						 data->connect_object);
 	}
@@ -496,7 +493,7 @@
  * @user_data: the signal handler data
  *
  * In the glade interface descriptions, signal handlers are specified for
- * widgets by name.  This function allows you to connect a C function to
+ * objects by name.  This function allows you to connect a C function to
  * all signals in the GladeXML file with the given signal handler name.
  *
  * It differs from glade_xml_signal_connect since it allows you to
@@ -538,18 +535,18 @@
 }
 
 /**
- * glade_xml_get_widget:
+ * glade_xml_get_object:
  * @self: the GladeXML object.
- * @name: the name of the widget.
+ * @name: the name of the object.
  *
- * This function is used to get a pointer to the GtkWidget corresponding to
+ * This function is used to get a pointer to the GObject corresponding to
  * @name in the interface description.  You would use this if you have to do
- * anything to the widget after loading.
+ * anything to the object after loading.
  *
- * Returns: the widget matching @name, or %NULL if none exists.
+ * Returns: the object matching @name, or %NULL if none exists.
  */
-GtkWidget *
-glade_xml_get_widget(GladeXML *self, const char *name)
+GObject *
+glade_xml_get_object(GladeXML *self, const char *name)
 {
     g_return_val_if_fail(self != NULL, NULL);
     g_return_val_if_fail(name != NULL, NULL);
@@ -559,38 +556,35 @@
 
 
 /**
- * glade_xml_get_widget_prefix:
+ * glade_xml_get_object:
  * @self: the GladeXML object.
- * @name: the name of the widget.
+ * @name: the name of the object.
  *
- * This function is used to get a list of pointers to the GtkWidget(s)
+ * This function is used to get a list of pointers to the GObject(s)
  * with names that start with the string @name in the interface description.
- * You would use this if you have to do something  to all of these widgets
+ * You would use this if you have to do something  to all of these objects
  * after loading.
  *
  * Returns: A list of the widget that match @name as the start of their
  * name, or %NULL if none exists.
  */
 static void
-widget_prefix_add_to_list(gchar *name, gpointer value,
-			  widget_prefix_data *data)
+object_prefix_add_to_list(gchar *name, gpointer value,
+			  GList *list)
 {
-    if (!strncmp (data->name, name, strlen (data->name)))
-	data->list = g_list_prepend (data->list, value);
+    list = g_list_prepend (list, value);
 }
 
 GList *
-glade_xml_get_widget_prefix(GladeXML *self, const gchar *prefix)
+glade_xml_get_objects(GladeXML *self)
 {
-    widget_prefix_data data;
+    GList *list = NULL;
 
-    data.name = prefix;
-    data.list = NULL;
-
     g_hash_table_foreach(self->priv->name_hash,
-			 (GHFunc) widget_prefix_add_to_list, &data);
-
-    return data.list;
+			 (GHFunc) object_prefix_add_to_list, list);
+    list = g_list_reverse (list);
+    
+    return list;
 }
 
 /**
@@ -622,37 +616,37 @@
 }
 
 /**
- * glade_get_widget_name:
- * @widget: the widget
+ * glade_get_object_name:
+ * @object: the object
  *
- * Used to get the name of a widget that was generated by a GladeXML object.
+ * Used to get the name of a object that was generated by a GladeXML object.
  *
- * Returns: the name of the widget.
+ * Returns: the name of the object.
  */
 const char *
-glade_get_widget_name(GtkWidget *widget)
+glade_get_object_name(GObject *object)
 {
-    g_return_val_if_fail(widget != NULL, NULL);
+    g_return_val_if_fail(object != NULL, NULL);
 
-    return (const char *)g_object_get_qdata(G_OBJECT(widget),
+    return (const char *)g_object_get_qdata(G_OBJECT(object),
 					    glade_xml_name_id);
 }
 
 /**
- * glade_get_widget_tree:
- * @widget: the widget
+ * glade_get_object_tree:
+ * @object: the object
  *
  * Description:
- * This function is used to get the GladeXML object that built this widget.
+ * This function is used to get the GladeXML object that built this object.
  *
- * Returns: the GladeXML object that built this widget.
+ * Returns: the GladeXML object that built this object.
  */
 GladeXML *
-glade_get_widget_tree(GtkWidget *widget)
+glade_get_object_tree(GObject *object)
 {
-    g_return_val_if_fail(widget != NULL, NULL);
+    g_return_val_if_fail(object != NULL, NULL);
 
-    return g_object_get_qdata(G_OBJECT(widget), glade_xml_tree_id);
+    return g_object_get_qdata(G_OBJECT(object), glade_xml_tree_id);
 }
 
 /* ------------------------------------------- */
@@ -692,13 +686,13 @@
 }
 
 /**
- * glade_xml_handle_widget_prop
+ * glade_xml_handle_object_prop
  * @self: the GladeXML object
- * @widget: the property the widget to set the property on.
+ * @object: the property the object widgetto set the property on.
  * @prop_name: the name of the property.
- * @value_name: the name of the widget used as the value for the property.
+ * @value_name: the name of the object used as the value for the property.
  *
- * Some widgets have properties of type GtkWidget.  These are
+ * Some objects have properties of type GtkWidget.  These are
  * represented as the widget name in the glade file.  When
  * constructing the interface, the widget specified as the value for a
  * property may not exist yet.
@@ -709,7 +703,7 @@
  * the widget is constructed.
  */
 void
-glade_xml_handle_widget_prop(GladeXML *self, GtkWidget *widget,
+glade_xml_handle_object_prop(GladeXML *self, GObject *object,
 			     const gchar *prop_name, const gchar *value_name)
 {
     GtkWidget *value_widget;
@@ -718,14 +712,13 @@
 
     value_widget = g_hash_table_lookup(self->priv->name_hash, value_name);
     if (value_widget) {
-	g_object_set(G_OBJECT(widget), prop_name, value_widget, NULL);
+	g_object_set(G_OBJECT(object), prop_name, value_widget, NULL);
     } else {
 	GladeDeferredProperty *dprop = g_new(GladeDeferredProperty, 1);
 
-	g_print("adding.. %s\n", prop_name);
 	dprop->target_name = value_name;
 	dprop->type = DEFERRED_PROP;
-	dprop->d.prop.object = G_OBJECT(widget);
+	dprop->d.prop.object = G_OBJECT(object);
 	dprop->d.prop.prop_name = prop_name;
 
 	self->priv->deferred_props = g_list_prepend(self->priv->deferred_props,
@@ -756,7 +749,7 @@
 
 /* this is a private function */
 static void
-glade_xml_add_signals(GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+glade_xml_add_signals(GladeXML *xml, GObject *object, GladeObjectInfo *info)
 {
     gint i;
 
@@ -765,7 +758,7 @@
 	GladeSignalData *data = g_new0(GladeSignalData, 1);
 	GList *list;
 
-	data->signal_object = G_OBJECT(w);
+	data->signal_object = G_OBJECT(object);
 	data->signal_name = sig->name;
 	data->connect_object = sig->object;
 	data->signal_after = sig->after;
@@ -778,7 +771,7 @@
 
 /* this is a private function */
 static void
-glade_xml_add_atk_actions(GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+glade_xml_add_atk_actions(GladeXML *xml, GtkWidget *w, GladeObjectInfo *info)
 {
     gint i, n_actions;
     AtkObject *accessible;
@@ -819,7 +812,7 @@
 
 /* this is a private function */
 static void
-glade_xml_add_atk_relations(GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+glade_xml_add_atk_relations(GladeXML *xml, GtkWidget *w, GladeObjectInfo *info)
 {
     gint i;
     AtkObject *accessible;
@@ -833,14 +826,14 @@
     
     for (i = 0; i < info->n_relations; i++) {
 	GladeAtkRelationInfo *rinfo = &info->relations[i];
-	GtkWidget *target_widget = glade_xml_get_widget (xml, rinfo->target);
+	GObject *target_widget = glade_xml_get_object (xml, rinfo->target);
 	AtkRelationType relation_type;
 
 	relation_type = atk_relation_type_for_name (rinfo->type);
 	if (target_widget) {
 	    AtkObject *target_accessible;
 
-	    target_accessible = gtk_widget_get_accessible (target_widget);
+	    target_accessible = gtk_widget_get_accessible (GTK_WIDGET (target_widget));
 
 	    atk_relation_set_add_relation_by_type (relations, relation_type,
 						   target_accessible);
@@ -860,7 +853,7 @@
 }
 
 static void
-glade_xml_add_accels(GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+glade_xml_add_accels(GladeXML *xml, GtkWidget *w, GladeObjectInfo *info)
 {
     gint i;
     for (i = 0; i < info->n_accels; i++) {
@@ -877,7 +870,7 @@
 }
 
 static void
-glade_xml_add_accessibility_info(GladeXML *xml, GtkWidget *w, GladeWidgetInfo *info)
+glade_xml_add_accessibility_info(GladeXML *xml, GtkWidget *w, GladeObjectInfo *info)
 {
     gint i;
     AtkObject *accessible = gtk_widget_get_accessible (w);
@@ -987,14 +980,14 @@
  * This prototype is for a function that creates custom widgets.
  * Returns: the GtkWidget.
  */
-static GtkWidget *
+static GObject *
 default_custom_handler(GladeXML *xml, gchar *func_name, gchar *name,
 		       gchar *string1, gchar *string2, gint int1, gint int2,
 		       gpointer user_data)
 {
-    typedef GtkWidget *(* create_func)(gchar *name,
-				       gchar *string1, gchar *string2,
-				       gint int1, gint int2);
+    typedef GObject *(* create_func)(gchar *name,
+				     gchar *string1, gchar *string2,
+				     gint int1, gint int2);
     GModule *allsymbols;
     create_func func;
 
@@ -1009,7 +1002,7 @@
     return NULL;
 }
 
-static GladeXMLCustomWidgetHandler custom_handler = default_custom_handler;
+static GladeXMLCustomObjectHandler custom_handler = default_custom_handler;
 static gpointer custom_user_data = NULL;
 
 /**
@@ -1023,14 +1016,14 @@
  * functions can be called to create custom widgets.
  */
 void
-glade_set_custom_handler(GladeXMLCustomWidgetHandler handler,
+glade_set_custom_handler(GladeXMLCustomObjectHandler handler,
 			 gpointer user_data)
 {
     custom_handler = handler;
     custom_user_data = user_data;
 }
 
-static GtkWidget *
+static GObject *
 glade_create_custom(GladeXML *xml, gchar *func_name, gchar *name,
 		    gchar *string1, gchar *string2, gint int1, gint int2)
 {
@@ -1038,10 +1031,10 @@
 				  int1, int2, custom_user_data);
 }
 
-static GtkWidget *
-custom_new(GladeXML *xml, GladeWidgetInfo *info)
+static GObject *
+custom_new(GladeXML *xml, GladeObjectInfo *info)
 {
-    GtkWidget *wid = NULL;
+    GObject *obj = NULL;
     gchar *func_name = NULL, *string1 = NULL, *string2 = NULL;
     gint int1 = 0, int2 = 0;
     int i;
@@ -1061,12 +1054,12 @@
 	else if (!strcmp(name, "int2"))
 	    int2 = strtol(value, NULL, 0);
     }
-    wid = glade_create_custom(xml, func_name, info->name, string1,
+    obj = glade_create_custom(xml, func_name, info->name, string1,
 			      string2, int1, int2);
     /* fallback to prevent segfault */
-    if (wid == NULL)
-	wid = gtk_label_new("[custom widget creation failed]");
-    return wid;
+    if (obj == NULL)
+	obj = G_OBJECT (gtk_label_new("[custom widget creation failed]"));
+    return obj;
 }
 
 /**
@@ -1200,8 +1193,8 @@
 			  const char *root)
 {
     gint i;
-    GladeWidgetInfo *wid;
-    GtkWidget *w;
+    GladeObjectInfo *obj;
+    GObject *o;
 
     /* make sure required modules are loaded */
     for (i = 0; i < iface->n_requires; i++) {
@@ -1209,13 +1202,13 @@
     }
 
     if (root) {
-	wid = g_hash_table_lookup(iface->names, root);
-	g_return_if_fail(wid != NULL);
-	w = glade_xml_build_widget(self, wid);
+	obj = g_hash_table_lookup(iface->names, root);
+	g_return_if_fail(obj != NULL);
+	o = glade_xml_build_object(self, obj);
     } else {
 	/* build all toplevel nodes */
 	for (i = 0; i < iface->n_toplevels; i++) {
-	    w = glade_xml_build_widget(self, iface->toplevels[i]);
+	    o = glade_xml_build_object(self, iface->toplevels[i]);
 	}
     }
 }
@@ -1223,7 +1216,7 @@
 /* below are functions from glade-build.h */
 
 /**
- * glade_register_widget:
+ * glade_register_object:
  * @type: the GType of the widget.
  * @new_func: the function used to construct instances of the widget.
  * @build_children: function used to construct children (or NULL).
@@ -1231,27 +1224,26 @@
  *
  * This function is used to register new construction functions for a
  * widget type.  The child building routine would call
- * glade_xml_build_widget() on each child node to create the child
+ * glade_xml_build_object() on each child node to create the child
  * before packing it.
  *
  * This function is mainly useful for addon widget modules for libglade
  * (it would get called from the glade_init_module() function).
  */
 void
-glade_register_widget(GType type,
-		      GladeNewFunc new_func,
+glade_register_object(GType type,
 		      GladeBuildChildrenFunc build_children,
 		      GladeFindInternalChildFunc find_internal_child)
 {
-    GladeWidgetBuildData *data;
+    GladeObjectBuildData *data;
     gpointer old_data;
 
-    g_return_if_fail(g_type_is_a(type, GTK_TYPE_WIDGET));
+    g_return_if_fail(g_type_is_a(type, G_TYPE_OBJECT));
 
     if (glade_build_data_id == 0)
 	glade_build_data_id = g_quark_from_static_string(glade_build_data_key);
 
-    data = g_new(GladeWidgetBuildData, 1);
+    data = g_new(GladeObjectBuildData, 1);
     data->build_children = build_children;
     data->find_internal_child = find_internal_child;
 
@@ -1263,18 +1255,18 @@
 }
 
 /* helper function for getting the build data for a type */
-static const GladeWidgetBuildData *
+static const GladeObjectBuildData *
 get_build_data(GType type)
 {
-    static const GladeWidgetBuildData widget_build_data = {
+    static const GladeObjectBuildData widget_build_data = {
 	NULL,
 	NULL
     };
-    static const GladeWidgetBuildData container_build_data = {
+    static const GladeObjectBuildData container_build_data = {
 	glade_standard_build_children,
 	NULL
     };
-    const GladeWidgetBuildData *build_data;
+    const GladeObjectBuildData *build_data;
 
     if (glade_build_data_id == 0)
 	glade_build_data_id = g_quark_from_static_string(glade_build_data_key);
@@ -1577,10 +1569,10 @@
 }
 
 /**
- * glade_standard_build_widget
+ * glade_standard_build_object
  * @xml: the GladeXML object.
  * @widget_type: the GType of the widget.
- * @info: the GladeWidgetInfo structure.
+ * @info: the GladeObjectInfo structure.
  *
  * This is the standard widget building function.  It processes all
  * the widget properties using the standard object properties
@@ -1589,15 +1581,15 @@
  *
  * Returns: the constructed widget.
  */
-GtkWidget *
-glade_standard_build_widget(GladeXML *xml, GType widget_type,
-			    GladeWidgetInfo *info)
+GObject *
+glade_standard_build_object(GladeXML *xml, GType widget_type,
+			    GladeObjectInfo *info)
 {
     static GArray *props_array = NULL;
     static GArray *custom_props_array = NULL;
     GObjectClass *oclass;
     CustomPropInfo *custom_props;
-    GtkWidget *widget;
+    GObject *object;
     GList *deferred_props = NULL, *tmp;
     guint i;
 
@@ -1642,27 +1634,21 @@
 	    continue;
 	}
 
-	if (pspec->flags & G_PARAM_CONSTRUCT_ONLY ||
-	    pspec->flags & G_PARAM_CONSTRUCT) {
+	g_print("Handling property: %s\n", info->properties[i].name);
 	    if (glade_xml_set_value_from_string(xml, pspec,
-						info->properties[i].value,
-						&param.value)) {
-		g_print("setting property %s\n", info->properties[i].name);
-		param.name = info->properties[i].name;
-		g_array_append_val(props_array, param);
-	    }
-	} else {
-	    g_print("deferring property %s\n", info->properties[i].name);
-	    
-	    //if (g_type_is_a(GTK_TYPE_WIDGET, G_PARAM_SPEC_VALUE_TYPE(pspec)) ||
-	    //	   g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), GTK_TYPE_WIDGET)) {
+					    info->properties[i].value,
+					    &param.value)) {
+	    param.name = info->properties[i].name;
+	    g_array_append_val(props_array, param);
+	} else if (g_type_is_a(GTK_TYPE_WIDGET, G_PARAM_SPEC_VALUE_TYPE(pspec)) ||
+		   g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), GTK_TYPE_WIDGET)) {
 	    /* if the pspec could hold a widget, then try to handle it
 	     * later */
 	    deferred_props = g_list_prepend(deferred_props,
 					    &info->properties[i]);
 	}
     }
-    widget = g_object_newv(widget_type, props_array->len,
+    object = g_object_newv(widget_type, props_array->len,
 			   (GParameter *)props_array->data);
 
     /* clean up props_array */
@@ -1677,16 +1663,15 @@
 
 	data = &g_array_index(custom_props_array, CustomPropData, i);
 	if (data->apply_prop)
-	    (* data->apply_prop) (xml, widget, data->prop->name,
+	    (* data->apply_prop) (xml, object, data->prop->name,
 				  data->prop->value);
     }
 
     /* handle deferred properties */
-    g_print("%d deferred properties\n", g_list_length(deferred_props));
     for (tmp = deferred_props; tmp; tmp = tmp->next) {
 	GladeProperty *prop = tmp->data;
 
-	glade_xml_handle_widget_prop(xml, widget, prop->name, prop->value);
+	glade_xml_handle_object_prop(xml, object, prop->name, prop->value);
     }
     g_list_free(deferred_props);
 
@@ -1694,7 +1679,7 @@
     g_array_set_size(custom_props_array, 0);
     g_type_class_unref(oclass);
 
-    return widget;
+    return object;
 }
 
 /**
@@ -1732,7 +1717,7 @@
  * glade_standard_build_children
  * @self: the GladeXML object.
  * @parent: the container widget.
- * @info: the GladeWidgetInfo structure.
+ * @info: the GladeObjectInfo structure.
  *
  * This is the standard child building function.  It simply calls
  * gtk_container_add on each child to add them to the parent, and
@@ -1744,15 +1729,16 @@
  * properties interfaces.
  */
 void
-glade_standard_build_children(GladeXML *self, GtkWidget *parent,
-			      GladeWidgetInfo *info)
+glade_standard_build_children(GladeXML *self,
+			      GObject *parent,
+			      GladeObjectInfo *info)
 {
     gint i, j;
 
     g_object_ref(G_OBJECT(parent));
     for (i = 0; i < info->n_children; i++) {
-	GladeWidgetInfo *childinfo = info->children[i].child;
-	GtkWidget *child;
+	GladeObjectInfo *childinfo = info->children[i].child;
+	GObject *child;
 
 	/* handle any internal children */
 	if (info->children[i].internal_child) {
@@ -1760,20 +1746,22 @@
 	    continue;
 	}
 
-	child = glade_xml_build_widget(self, childinfo);
+	child = glade_xml_build_object(self, childinfo);
 
 	g_object_ref(G_OBJECT(child));
-	gtk_widget_freeze_child_notify(child);
+	if (GTK_IS_WIDGET (parent) && GTK_IS_WIDGET (child)) {
+	    gtk_widget_freeze_child_notify(GTK_WIDGET (child));
+	    gtk_container_add(GTK_CONTAINER(parent), GTK_WIDGET(child));
 
-	gtk_container_add(GTK_CONTAINER(parent), child);
-
-	for (j = 0; j < info->children[i].n_properties; j++)
-	    glade_xml_set_packing_property (
-		self, parent, child,
-		info->children[i].properties[j].name,
-		info->children[i].properties[j].value);
+	    for (j = 0; j < info->children[i].n_properties; j++)
+		glade_xml_set_packing_property(self,
+		    GTK_WIDGET(parent),
+		    GTK_WIDGET(child),
+		    info->children[i].properties[j].name,
+		    info->children[i].properties[j].value);
 	
-	gtk_widget_thaw_child_notify(child);
+	    gtk_widget_thaw_child_notify(GTK_WIDGET(child));
+	}
 	g_object_unref(G_OBJECT(child));
     }
     g_object_unref(G_OBJECT(parent));
@@ -1783,12 +1771,12 @@
  * GladeNewFunc
  * @xml: The GladeXML object.
  * @widget_type: the GType code of the widget.
- * @info: the GladeWidgetInfo structure for this widget.
+ * @info: the GladeObjectInfo structure for this widget.
  *
  * This function signature should be used by functions that build particular
  * widget types.  The function should create the new widget and set any non
  * standard widget parameters (ie. don't set visibility, size, etc), as
- * this is handled by glade_xml_build_widget, which calls these functions.
+ * this is handled by glade_xml_build_object, which calls these functions.
  *
  * Returns: the new widget.
  */
@@ -1796,11 +1784,11 @@
  * GladeBuildChildrenFunc
  * @xml: the GladeXML object.
  * @parent: the parent.
- * @info: the GladeWidgetInfo structure for the parent.
+ * @info: the GladeObjectInfo structure for the parent.
  *
  * This function signature should be used by functions that are responsible
  * for adding children to a container widget.  To create each child widget,
- * glade_xml_build_widget should be called.
+ * glade_xml_build_object should be called.
  */
 /**
  * GladeFindInternalChildFunc
@@ -1824,9 +1812,9 @@
  * Returns: the named internal child.
  */
 /**
- * glade_xml_build_widget:
+ * glade_xml_build_object:
  * @self: the GladeXML object.
- * @info: the GladeWidgetInfo structure for the widget.
+ * @info: the GladeObjectInfo structure for the widget.
  *
  * This function is not intended for people who just use libglade.  Instead
  * it is for people extending it (it is designed to be called in the child
@@ -1842,16 +1830,16 @@
  * 
  * Returns: the newly created widget.
  */
-GtkWidget *
-glade_xml_build_widget(GladeXML *self, GladeWidgetInfo *info)
+GObject *
+glade_xml_build_object(GladeXML *self, GladeObjectInfo *info)
 {
     GType type = G_TYPE_INVALID;
-    GtkWidget *ret;
+    GObject *ret;
     
     g_message("Widget class: %s\tname: %s", info->classname, info->name);
     
     if (!strcmp(info->classname, "Custom")) {
-	ret = custom_new (self, info);
+	ret = custom_new(self, info);
     } else {
 	/* Call GladeXml's lookup_type() virtual function to get the gtype: */
 	type = (* GLADE_XML_GET_CLASS(self)->lookup_type)(self, info->classname);
@@ -1860,17 +1848,15 @@
 	    char buf[50];
 	    g_warning("unknown widget class '%s'", info->classname);
 	    g_snprintf(buf, 49, "[a %s]", info->classname);
-	    ret = gtk_label_new(buf);
+	    ret = G_OBJECT (gtk_label_new(buf));
 	} else {
-	    g_print("glade_standard_build_widget(..., %s, ...)\n", g_type_name(type));
-	    ret = glade_standard_build_widget(self, type, info);
+	    ret = glade_standard_build_object(self, type, info);
 	}
     }
 
     if (GTK_IS_WINDOW (ret))
 	glade_xml_set_toplevel(self, GTK_WINDOW (ret));
 
-    g_print("set_common_parms...(%s->%s)\n", g_type_name(G_OBJECT_TYPE(ret)), gtk_widget_get_name(ret));
     glade_xml_set_common_params(self, ret, info);
 
     if (GTK_IS_WINDOW (ret))
@@ -1892,26 +1878,29 @@
  * next child.
  */
 void
-glade_xml_handle_internal_child(GladeXML *self, GtkWidget *parent,
+glade_xml_handle_internal_child(GladeXML *self,
+				GObject *parent,
 				GladeChildInfo *child_info)
 {
-    const GladeWidgetBuildData *parent_build_data = NULL;
-    GtkWidget *child;
-    GladeWidgetInfo *info;
+    const GladeObjectBuildData *parent_build_data = NULL;
+    GObject *child;
+    GladeObjectInfo *info;
     GObjectClass *oclass;
     CustomPropInfo *custom_props;
     guint i;
 
     /* walk up the widget heirachy until we find a parent with a
      * find_internal_child handler */
-    while (parent_build_data == NULL && parent != NULL) {
-	parent_build_data = get_build_data(G_OBJECT_TYPE(parent));
+    if (GTK_IS_WIDGET (parent)) {
+	while (parent_build_data == NULL && parent != NULL) {
+	    parent_build_data = get_build_data(G_OBJECT_TYPE(parent));
 
-	if (parent_build_data->find_internal_child != NULL)
-	    break;
+	    if (parent_build_data->find_internal_child != NULL)
+		break;
 
-	parent_build_data = NULL; /* set to NULL if no find_internal_child */
-	parent = parent->parent;
+	    parent_build_data = NULL; /* set to NULL if no find_internal_child */
+	    parent = G_OBJECT(GTK_WIDGET(parent)->parent);
+	}
     }
 
     if (!parent_build_data || !parent_build_data->find_internal_child) {
@@ -1968,7 +1957,7 @@
          * problem. */
        if (g_type_is_a(GTK_TYPE_WIDGET, G_PARAM_SPEC_VALUE_TYPE(pspec)) ||
            g_type_is_a(G_PARAM_SPEC_VALUE_TYPE(pspec), GTK_TYPE_WIDGET)) {
-	   glade_xml_handle_widget_prop(self, child,
+	   glade_xml_handle_object_prop(self, child,
 					pspec->name,
 					info->properties[i].value);
 	   continue;
@@ -1987,7 +1976,7 @@
 
 
 static void
-glade_xml_widget_destroy(GtkObject *object, GladeXML *xml)
+glade_xml_object_destroy(GtkObject *object, GladeXML *xml)
 {
     gchar *name;
 
@@ -1996,7 +1985,8 @@
 
     name = g_object_get_qdata(G_OBJECT(object), glade_xml_name_id);
 
-    if (!name) return;
+    if (!name)
+	return;
     g_hash_table_remove(xml->priv->name_hash, name);
     g_object_set_qdata(G_OBJECT(object), glade_xml_tree_id, NULL);
     g_object_set_qdata(G_OBJECT(object), glade_xml_name_id, NULL);
@@ -2006,50 +1996,48 @@
  * glade_xml_set_common_params
  * @self: the GladeXML widget.
  * @widget: the widget to set parameters on.
- * @info: the GladeWidgetInfo structure for the widget.
+ * @info: the GladeObjectInfo structure for the widget.
  *
  * This function sets the common parameters on a widget, and is responsible
  * for inserting it into the GladeXML object's internal structures.  It will
  * also add the children to this widget.  Usually this function is only called
- * by glade_xml_build_widget, but is exposed for difficult cases, such as
+ * by glade_xml_build_object, but is exposed for difficult cases, such as
  * setting up toolbar buttons and the like.
  */
 void
-glade_xml_set_common_params(GladeXML *self, GtkWidget *widget,
-			    GladeWidgetInfo *info)
+glade_xml_set_common_params(GladeXML *self, GObject *object,
+			    GladeObjectInfo *info)
 {
     GList *tmp;
-    const GladeWidgetBuildData *data;
+    const GladeObjectBuildData *data;
     static GQuark visible_id = 0;
 
     /* get the build data */
-    data = get_build_data(G_OBJECT_TYPE(widget));
-    glade_xml_add_signals(self, widget, info);
-    glade_xml_add_accels(self, widget, info);
+    data = get_build_data(G_OBJECT_TYPE(object));
+    glade_xml_add_signals(self, object, info);
+    if (GTK_IS_WIDGET (object)) {
+	gtk_widget_set_name(GTK_WIDGET(object), info->name);
+	glade_xml_add_accels(self, GTK_WIDGET(object), info);
+	glade_xml_add_accessibility_info(self, GTK_WIDGET(object), info);
+    }
 
-    gtk_widget_set_name(widget, info->name);
-    glade_xml_add_accessibility_info(self, widget, info);
+    /* store this information as data of the object. */
+    g_object_set_qdata(object, glade_xml_tree_id, self);
+    g_object_set_qdata(object, glade_xml_name_id, info->name);
+    /* store objects in hash table, for easy lookup */
+    g_hash_table_insert(self->priv->name_hash, info->name, object);
 
-    /* store this information as data of the widget. */
-    g_object_set_qdata(G_OBJECT(widget), glade_xml_tree_id, self);
-    g_object_set_qdata(G_OBJECT(widget), glade_xml_name_id, info->name);
-    /* store widgets in hash table, for easy lookup */
-    g_hash_table_insert(self->priv->name_hash, info->name, widget);
-
-    /* set up function to remove widget from GladeXML object's
+    /* set up function to remove object from GladeXML object's
      * name_hash on destruction. Use connect_object so the handler is
      * automatically removed on finalization of the GladeXML
      * object. */
-    g_signal_connect_object(G_OBJECT(widget), "destroy",
-			    G_CALLBACK(glade_xml_widget_destroy),
-			    G_OBJECT(self), 0);
+    if (GTK_IS_OBJECT (object))
+	g_signal_connect_object(object, "destroy",
+				G_CALLBACK(glade_xml_object_destroy),
+				G_OBJECT(self), 0);
 
-    /* handle any deferred properties using this widget */
+    /* handle any deferred properties using this object */
     tmp = self->priv->deferred_props;
-    g_print("%s %s has %d deferred properties\n",
-	    g_type_name(G_OBJECT_TYPE(widget)),
-	    gtk_widget_get_name(widget),
-	    g_list_length(self->priv->deferred_props));
     while (tmp) {
 	GladeDeferredProperty *dprop = tmp->data;
 
@@ -2060,14 +2048,13 @@
 
 	    switch (dprop->type) {
 	    case DEFERRED_PROP:
-		g_print("defered property %s.%s", dprop->target_name, dprop->d.prop.prop_name);
 		g_object_set(G_OBJECT(dprop->d.prop.object),
-			     dprop->d.prop.prop_name, G_OBJECT(widget),
+			     dprop->d.prop.prop_name, G_OBJECT(object),
 			     NULL);
 		break;
 	    case DEFERRED_REL:
 		{
-		    AtkObject *target = gtk_widget_get_accessible(widget);
+		    AtkObject *target = gtk_widget_get_accessible(GTK_WIDGET(object));
 
 		    atk_relation_set_add_relation_by_type
 			(dprop->d.rel.relation_set,
@@ -2085,18 +2072,14 @@
     }
 
     if (data && data->build_children && info->children) {
-	if (GTK_IS_CONTAINER (widget))
-	    data->build_children(self, widget, info);
-	else
-	    g_warning ("widget %s (%s) has children, but is not a GtkContainer.",
-		       info->name, g_type_name (G_TYPE_FROM_INSTANCE (widget)));
+	data->build_children(self, object, info);
     }
 
     if (visible_id == 0)
 	visible_id = g_quark_from_static_string("Libglade::visible");
 
-    if (g_object_get_qdata(G_OBJECT(widget), visible_id))
-	gtk_widget_show(widget);
+    if (g_object_get_qdata(object, visible_id))
+	gtk_widget_show(GTK_WIDGET(object));
 }
 
 /**

Modified: libglade/glade-xml.h
===================================================================
--- libglade/glade-xml.h	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/glade-xml.h	2005-03-30 19:07:43 UTC (rev 239)
@@ -102,30 +102,29 @@
 					      gpointer user_data);
 
 
-GtkWidget *glade_xml_get_widget              (GladeXML *self,
+GObject   *glade_xml_get_object              (GladeXML *self,
 					      const char *name);
-GList     *glade_xml_get_widget_prefix       (GladeXML *self,
-					      const char *name);
+GList     *glade_xml_get_objects             (GladeXML *self);
 
 gchar     *glade_xml_relative_file           (GladeXML *self,
 					      const gchar *filename);
 
 /* don't free the results of these two ... */
-const char *glade_get_widget_name      (GtkWidget *widget);
-GladeXML   *glade_get_widget_tree      (GtkWidget *widget);
+const char *glade_get_object_name      (GObject *object);
+GladeXML   *glade_get_object_tree      (GObject *object);
 
 
 /* interface for changing the custom widget handling */
-typedef GtkWidget *(* GladeXMLCustomWidgetHandler) (GladeXML *xml,
-						    gchar *func_name,
-						    gchar *name,
-						    gchar *string1,
-						    gchar *string2,
-						    gint int1,
-						    gint int2,
-						    gpointer user_data);
+typedef GObject *(* GladeXMLCustomObjectHandler) (GladeXML *xml,
+						  gchar *func_name,
+						  gchar *name,
+						  gchar *string1,
+						  gchar *string2,
+						  gint int1,
+						  gint int2,
+						  gpointer user_data);
 
-void glade_set_custom_handler(GladeXMLCustomWidgetHandler handler,
+void glade_set_custom_handler(GladeXMLCustomObjectHandler handler,
 			      gpointer user_data);
 
 typedef struct _GladeSignalData GladeSignalData;

Modified: libglade/test.c
===================================================================
--- libglade/test.c	2005-03-30 14:01:15 UTC (rev 238)
+++ libglade/test.c	2005-03-30 19:07:43 UTC (rev 239)
@@ -59,9 +59,9 @@
     const char *filename = NULL;
     const char *rootnode = NULL;
     gboolean no_connect = FALSE;
-
     int i;
     GladeXML *xml;
+    GList *l;
 
     /* initialise libraries */
     gtk_init(&argc, &argv);
@@ -95,7 +95,7 @@
      * construct widgets below that point. This shows how you might
      * want to integrate the constructed interface in your program. */
     if (rootnode) {
-	GtkWidget *wid = glade_xml_get_widget(xml, rootnode);
+	GObject *wid = glade_xml_get_object(xml, rootnode);
 	if (!GTK_IS_WINDOW(wid)) {
 	    GtkWidget *win, *frame;
 
@@ -107,11 +107,20 @@
 	    gtk_container_set_border_width(GTK_CONTAINER(frame), 5);
 	    gtk_container_add(GTK_CONTAINER(win), frame);
 	    gtk_widget_show(frame);
-	    gtk_container_add(GTK_CONTAINER(frame), wid);
+	    gtk_container_add(GTK_CONTAINER(frame), GTK_WIDGET(wid));
 	    gtk_widget_show(win);
 	}
     }
 
+    /* make sure delete-event quits the program, connect it on all toplevels */
+    for (l = glade_xml_get_objects(xml); l;
+	 l = l->next) {
+	GtkWidget *widget = l->data;
+	if (GTK_IS_WINDOW(widget))
+	    g_signal_connect(widget, "delete-event",
+			     G_CALLBACK(gtk_main_quit), NULL);
+    }
+    
     /* look up handler names in the symbol table and automatically
      * connect the signals. This requires that your program export
      * dynamic symbols.  If you link using libtool, passing the



More information about the POS-commit mailing list