While coding a custom widget library i realize we do not take into
account GTK_WIDGET_COMPOSITE_CHILD() and i am not sayin we should but
this make me think we might be able to get rid of get_children() and
get_internal_child functions :)

So, less words more action!

Just take a look at the patch, it only needs some cleanup but you can
get the idea anywas

greets

Juan Pablo
Index: plugins/gtk+/glade-gtk.c
===================================================================
--- plugins/gtk+/glade-gtk.c	(revision 1244)
+++ plugins/gtk+/glade-gtk.c	(working copy)
@@ -806,8 +806,9 @@ glade_gtk_box_get_first_blank (GtkBox *b
 			gint gwidget_position;
 			GladeProperty *property =
 				glade_widget_get_property (gwidget, "position");
-			gwidget_position = g_value_get_int (property->value);
-
+			if (property)
+				gwidget_position = g_value_get_int (property->value);
+			
 			if (gwidget_position > position)
 				return position;
 		}
@@ -962,35 +963,6 @@ glade_gtk_box_add_child (GladeWidgetAdap
 		glade_widget_pack_property_set (gchild, "position", num_children - 1);
 }
 
-GObject * GLADEGTK_API
-glade_gtk_box_get_internal_child (GladeWidgetAdaptor *adaptor,
-				  GObject            *object, 
-				  const gchar        *name)
-{
-	GList   *children, *l;
-	GObject *child = NULL;	
-
-	g_return_val_if_fail (GTK_IS_BOX (object), NULL);
-	
-	children = l = gtk_container_get_children (GTK_CONTAINER (object));
-	
-	while (l)
-	{
-		GladeWidget *gw = glade_widget_get_from_gobject (l->data);
-		
-		if (gw && gw->internal && strcmp (gw->internal, name) == 0)
-		{
-			child = G_OBJECT (l->data);
-			break;
-		}
-		
-		l= l->next;
-	}
-	g_list_free (children);
-
-	return child;
-}
-
 void GLADEGTK_API
 glade_gtk_box_remove_child (GladeWidgetAdaptor *adaptor,
 			    GObject            *object, 
@@ -2976,8 +2948,6 @@ glade_gtk_dialog_post_create (GladeWidge
 	GtkDialog    *dialog = GTK_DIALOG (object);
 	GladeWidget  *widget;
 	GladeWidget  *vbox_widget, *actionarea_widget, *colorsel, *fontsel;
-	GladeWidget  *save_button = NULL, *close_button = NULL, *ok_button = NULL,
-		*cancel_button = NULL, *help_button = NULL, *apply_button = NULL;
 	
 	g_return_if_fail (GTK_IS_DIALOG (dialog));
 
@@ -2996,42 +2966,30 @@ glade_gtk_dialog_post_create (GladeWidge
 
 	if (GTK_IS_INPUT_DIALOG (object))
 	{
-		save_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_INPUT_DIALOG (dialog)->save_button),
-			 "save_button", "inputdialog", FALSE, reason);
-
-		close_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_INPUT_DIALOG (dialog)->close_button),
-			 "close_button", "inputdialog", FALSE, reason);
-
+		GtkInputDialog *d = GTK_INPUT_DIALOG (dialog);
+		glade_widget_add_internals (widget,
+					    d->save_button, "save_button", 
+					    d->close_button, "close_button",
+					    NULL);
 	}
 	else if (GTK_IS_FILE_SELECTION (object))
 	{
-		ok_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FILE_SELECTION (object)->ok_button),
-			 "ok_button", "filesel", FALSE, reason);
-
-		cancel_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FILE_SELECTION (object)->cancel_button),
-			 "cancel_button", "filesel", FALSE, reason);
+		GtkFileSelection *d = GTK_FILE_SELECTION (dialog);
+		glade_widget_add_internals (widget,
+					    d->ok_button, "ok_button",
+					    d->cancel_button, "cancel_button",
+					    NULL);
 	}
 	else if (GTK_IS_COLOR_SELECTION_DIALOG (object))
 	{
-		ok_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_COLOR_SELECTION_DIALOG (object)->ok_button),
-			 "ok_button", "colorsel", FALSE, reason);
-
-		cancel_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_COLOR_SELECTION_DIALOG (object)->cancel_button),
-			 "cancel_button", "colorsel", FALSE, reason);
-
-		help_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_COLOR_SELECTION_DIALOG (object)->help_button),
-			 "help_button", "colorsel", FALSE, reason);
-
-		colorsel = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_COLOR_SELECTION_DIALOG (object)->colorsel),
-			 "color_selection", "colorsel", FALSE, reason);
+		GtkColorSelectionDialog *d = GTK_COLOR_SELECTION_DIALOG (dialog);
+		glade_widget_add_internals (widget,
+					    d->ok_button, "ok_button",
+					    d->cancel_button, "cancel_button",
+					    d->help_button, "help_button",
+					    d->colorsel, "color_selection",
+					    NULL);
+		colorsel = glade_widget_get_from_gobject (d->colorsel);
 
 		/* Set this to 1 at load time, if there are any children then
 		 * size will adjust appropriately (otherwise the default "3" gets
@@ -3043,21 +3001,14 @@ glade_gtk_dialog_post_create (GladeWidge
 	}
 	else if (GTK_IS_FONT_SELECTION_DIALOG (object))
 	{
-		ok_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FONT_SELECTION_DIALOG (object)->ok_button),
-			 "ok_button", "fontsel", FALSE, reason);
-
-		apply_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FONT_SELECTION_DIALOG (object)->apply_button),
-			 "apply_button", "fontsel", FALSE, reason);
-		
-		cancel_button = glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FONT_SELECTION_DIALOG (object)->cancel_button),
-			 "cancel_button", "fontsel", FALSE, reason);
-
-		fontsel =  glade_widget_adaptor_create_internal
-			(widget, G_OBJECT (GTK_FONT_SELECTION_DIALOG (object)->fontsel),
-			 "font_selection", "fontsel", FALSE, reason);
+		GtkFontSelectionDialog *d = GTK_FONT_SELECTION_DIALOG (dialog);
+		glade_widget_add_internals (widget,
+					    d->ok_button, "ok_button",
+					    d->cancel_button, "cancel_button",
+					    d->apply_button, "apply_button",
+					    d->fontsel, "font_selection",
+					    NULL);
+		fontsel = glade_widget_get_from_gobject (d->fontsel);
 
 		/* Set this to 1 at load time, if there are any children then
 		 * size will adjust appropriately (otherwise the default "3" gets
@@ -3066,15 +3017,16 @@ glade_gtk_dialog_post_create (GladeWidge
 		if (reason == GLADE_CREATE_LOAD)
 			glade_widget_property_set (fontsel, "size", 2);
 	}
+	else if (GTK_IS_ABOUT_DIALOG (object));
 	else
 	{
-		vbox_widget = glade_widget_adaptor_create_internal 
-			(widget, G_OBJECT(dialog->vbox),
-			 "vbox", "dialog", FALSE, reason);
-
-		actionarea_widget = glade_widget_adaptor_create_internal
-			(vbox_widget, G_OBJECT(dialog->action_area),
-			 "action_area", "dialog", FALSE, reason);
+		glade_widget_add_internals (widget,
+					    dialog->vbox, "vbox",
+					    dialog->action_area, "action_area",
+					    NULL);
+
+		vbox_widget = glade_widget_get_from_gobject (dialog->vbox);
+		actionarea_widget = glade_widget_get_from_gobject (dialog->action_area);
 
 		/* These properties are controlled by the GtkDialog style properties:
 		 * "content-area-border", "button-spacing" and "action-area-border",
@@ -3106,103 +3058,6 @@ glade_gtk_dialog_post_create (GladeWidge
 	}
 }
 
-
-GtkWidget * GLADEGTK_API
-glade_gtk_dialog_get_internal_child (GladeWidgetAdaptor  *adaptor,
-				     GtkDialog           *dialog,
-				     const gchar         *name)
-{
-	GtkWidget *child = NULL;
-
-	g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
-
-	if (GTK_IS_INPUT_DIALOG (dialog))
-	{
-		if (strcmp ("close_button", name) == 0)
-			child = GTK_INPUT_DIALOG (dialog)->close_button;
-		else if (strcmp ("save_button", name) == 0)
-			child = GTK_INPUT_DIALOG (dialog)->save_button;
-	}
-	else if (GTK_IS_FILE_SELECTION (dialog))
-	{
-		if (strcmp ("ok_button", name) == 0)
-			child = GTK_FILE_SELECTION (dialog)->ok_button;
-		else if (strcmp ("cancel_button", name) == 0)
-			child = GTK_FILE_SELECTION (dialog)->cancel_button;
-	}
-	else if (GTK_IS_COLOR_SELECTION_DIALOG (dialog))
-	{
-		if (strcmp ("ok_button", name) == 0)
-			child = GTK_COLOR_SELECTION_DIALOG (dialog)->ok_button;
-		else if (strcmp ("cancel_button", name) == 0)
-			child = GTK_COLOR_SELECTION_DIALOG (dialog)->cancel_button;
-		else if (strcmp ("help_button", name) == 0)
-			child = GTK_COLOR_SELECTION_DIALOG (dialog)->help_button;
-		else if (strcmp ("color_selection", name) == 0)
-			child = GTK_COLOR_SELECTION_DIALOG (dialog)->colorsel;
-	}
-	else if (GTK_IS_FONT_SELECTION_DIALOG (dialog))
-	{
-		if (strcmp ("ok_button", name) == 0)
-			child = GTK_FONT_SELECTION_DIALOG (dialog)->ok_button;
-		else if (strcmp ("apply_button", name) == 0)
-			child = GTK_FONT_SELECTION_DIALOG (dialog)->apply_button;
-		else if (strcmp ("cancel_button", name) == 0)
-			child = GTK_FONT_SELECTION_DIALOG (dialog)->cancel_button;
-		else if (strcmp ("font_selection", name) == 0)
-			child = GTK_FONT_SELECTION_DIALOG (dialog)->fontsel;
-	}
-	else
-	{
-		/* Default generic dialog handling
-		 */
-		if (strcmp ("vbox", name) == 0)
-			child = dialog->vbox;
-		else if (strcmp ("action_area", name) == 0)
-			child = dialog->action_area;
-	}
-
-	return child;
-}
-
-GList * GLADEGTK_API
-glade_gtk_dialog_get_children (GladeWidgetAdaptor  *adaptor,
-			       GtkDialog           *dialog)
-{
-	GList *list = NULL;
-
-	g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
-
-	list = glade_util_container_get_all_children (GTK_CONTAINER (dialog));
-
-	if (GTK_IS_INPUT_DIALOG (dialog))
-	{
-		list = g_list_prepend (list, GTK_INPUT_DIALOG (dialog)->close_button);
-		list = g_list_prepend (list, GTK_INPUT_DIALOG (dialog)->save_button);
-	}
-	else if (GTK_IS_FILE_SELECTION (dialog))
-	{
-		list = g_list_prepend (list, GTK_FILE_SELECTION (dialog)->ok_button);
-		list = g_list_prepend (list, GTK_FILE_SELECTION (dialog)->cancel_button);
-	}
-	else if (GTK_IS_COLOR_SELECTION_DIALOG (dialog))
-	{
-		list = g_list_prepend (list, GTK_COLOR_SELECTION_DIALOG (dialog)->ok_button);
-		list = g_list_prepend (list, GTK_COLOR_SELECTION_DIALOG (dialog)->cancel_button);
-		list = g_list_prepend (list, GTK_COLOR_SELECTION_DIALOG (dialog)->help_button);
-		list = g_list_prepend (list, GTK_COLOR_SELECTION_DIALOG (dialog)->colorsel);
-	}
-	else if (GTK_IS_FONT_SELECTION_DIALOG (dialog))
-	{
-		list = g_list_prepend (list, GTK_FONT_SELECTION_DIALOG (dialog)->ok_button);
-		list = g_list_prepend (list, GTK_FONT_SELECTION_DIALOG (dialog)->apply_button);
-		list = g_list_prepend (list, GTK_FONT_SELECTION_DIALOG (dialog)->cancel_button);
-		list = g_list_prepend (list, GTK_FONT_SELECTION_DIALOG (dialog)->fontsel);
-	}
-	return list;
-}
-
-
 void GLADEGTK_API
 glade_gtk_dialog_set_property (GladeWidgetAdaptor *adaptor,
 			       GObject            *object, 
@@ -5312,28 +5167,11 @@ glade_gtk_combo_box_entry_post_create (G
 				       GObject            *object, 
 				       GladeCreateReason   reason)
 {
-	GladeWidget *gcombo = glade_widget_get_from_gobject (object);
-
 	/* Chain up */
 	GWA_GET_CLASS (GTK_TYPE_CONTAINER)->post_create (adaptor, object, reason);
 
-	glade_widget_adaptor_create_internal
-		(gcombo, G_OBJECT (GTK_BIN (object)->child),
-		 "entry", "comboboxentry", FALSE, reason);
-}
-
-GObject * GLADEGTK_API
-glade_gtk_combo_box_entry_get_internal_child (GladeWidgetAdaptor *adaptor,
-					      GObject *object, 
-					      const gchar *name)
-{
-	GObject *child = NULL;
-	g_return_val_if_fail (GTK_IS_COMBO_BOX_ENTRY (object), NULL);
-	
-	if (strcmp ("entry", name) == 0)
-		child = G_OBJECT (gtk_bin_get_child (GTK_BIN (object)));
-
-	return child;
+	glade_widget_add_internals (glade_widget_get_from_gobject (object),
+				    GTK_BIN (object)->child, "entry", NULL);
 }
 
 /* ----------------------------- GtkSpinButton ------------------------------ */
@@ -5403,55 +5241,18 @@ glade_gtk_combo_post_create (GladeWidget
 			     GObject            *object,
 			     GladeCreateReason   reason)
 {
-	GladeWidget  *gcombo, *gentry, *glist;
-
+	GladeWidget *widget;
+	GtkCombo *combo;
+	
 	g_return_if_fail (GTK_IS_COMBO (object));
 
-	if ((gcombo = glade_widget_get_from_gobject (object)) == NULL)
-		return;
+	widget = glade_widget_get_from_gobject (object);
+	combo = GTK_COMBO (object);
 	
-	gentry = glade_widget_adaptor_create_internal
-		(gcombo, G_OBJECT (GTK_COMBO (object)->entry),
-		 "entry", "combo", FALSE, reason);
-
-	/* We mark this 'anarchist' since its outside of the hierarchy */
-	glist  = glade_widget_adaptor_create_internal
-		(gcombo, G_OBJECT (GTK_COMBO (object)->list),
-		 "list", "combo", TRUE, reason);
-
-}
-
-GObject * GLADEGTK_API
-glade_gtk_combo_get_internal_child (GladeWidgetAdaptor *adaptor,
-				    GtkCombo           *combo,
-				    const gchar        *name)
-{
-	GObject *child = NULL;
-
-	g_return_val_if_fail (GTK_IS_COMBO (combo), NULL);
-	
-	if (strcmp ("list", name) == 0)
-		child = G_OBJECT (combo->list);
-	else if (strcmp ("entry", name) == 0)
-		child = G_OBJECT (combo->entry);
-
-	return child;
-}
-
-GList * GLADEGTK_API
-glade_gtk_combo_get_children (GtkCombo *combo)
-{
-	GList *list = NULL;
-
-	g_return_val_if_fail (GTK_IS_COMBO (combo), NULL);
-
-	list = glade_util_container_get_all_children (GTK_CONTAINER (combo));
-
-	/* Ensure that we only return one 'combo->list' */
-	if (g_list_find (list, combo->list) == NULL)
-		list = g_list_append (list, combo->list);
-
-	return list;
+	glade_widget_add_internals (widget,
+				    combo->entry, "entry",
+				    combo->list, "list",
+				    NULL);
 }
 
 /* ----------------------------- GtkListItem ------------------------------ */
Index: gladeui/glade-widget.c
===================================================================
--- gladeui/glade-widget.c	(revision 1244)
+++ gladeui/glade-widget.c	(working copy)
@@ -898,6 +898,7 @@ glade_widget_init (GladeWidget *widget)
 	widget->packing_properties = NULL;
 	widget->prop_refs = NULL;
 	widget->prop_refs_readonly = FALSE;
+	widget->internals = NULL;
 	widget->signals = g_hash_table_new_full
 		(g_str_hash, g_str_equal,
 		 (GDestroyNotify) g_free,
@@ -1257,14 +1258,14 @@ static GObject *
 glade_widget_get_internal_child (GladeWidget *parent,
 				 const gchar *internal)                
 {
+	GObject *child;
+	
 	while (parent)
 	{
-		GladeWidgetAdaptorClass *adaptor_class =
-			GLADE_WIDGET_ADAPTOR_GET_CLASS (parent->adaptor);
-
-		if (adaptor_class->get_internal_child)
-			return glade_widget_adaptor_get_internal_child
-				(parent->adaptor, parent->object, internal);
+		child = glade_widget_adaptor_get_internal_child (parent->adaptor,
+								 parent->object,
+								 internal);
+		if (child) return child;
 
 		parent = glade_widget_get_parent (parent);
 	}
@@ -4289,3 +4290,46 @@ glade_widget_placeholder_relation (Glade
 		GTK_IS_WIDGET (widget->object) &&
 		GWA_USE_PLACEHOLDERS (parent->adaptor));
 }
+
+void
+glade_widget_add_internals (GladeWidget *parent, GtkWidget *internal,
+			    const gchar *name, ...)
+{
+	GList *n, *o, *names = NULL, *objects = NULL;
+	va_list va;
+	
+	va_start (va, name);
+	
+	printf ("glade_widget_add_internals %s\n", parent->name);
+	while (internal && name)
+	{
+		printf ("\t 1 %p %s\n", internal, name);
+		
+		objects = g_list_append (objects, internal);
+		names = g_list_append (names, (gchar*) name);
+		
+		internal = va_arg (va, GtkWidget *);
+		name = va_arg (va, gchar *);
+	}
+	
+	va_end (va);
+	
+	parent->internals = g_list_concat (parent->internals, objects);
+	
+	for (o = objects, n = names;
+	     o && n && o->data && n->data;
+	     o = g_list_next (o), n = g_list_next (n))
+	{
+		printf ("\t 2 %p %s %d\n", o->data, n->data,
+			(glade_widget_get_from_gobject (gtk_widget_get_parent (o->data))) ? FALSE : TRUE);
+		glade_widget_adaptor_create_internal (parent,
+					      G_OBJECT (o->data),
+					      n->data,
+					      parent->adaptor->generic_name,
+					      (glade_widget_get_from_gobject (gtk_widget_get_parent (o->data))) ? FALSE : TRUE,
+					      parent->construct_reason);
+	}
+	printf ("glade_widget_add_internals %s end\n", parent->name);
+	g_list_free (names);
+	parent->internals = objects;
+}
Index: gladeui/glade-widget.h
===================================================================
--- gladeui/glade-widget.h	(revision 1244)
+++ gladeui/glade-widget.h	(working copy)
@@ -88,6 +88,8 @@ struct _GladeWidget
 	gint               height;  /* usefull for parentless widgets in the
 				     * GladeDesignLayout */
 
+	GList *internals; /* A list of internal widgets */
+	
 	/* Construct parameters: */
 	GladeWidget       *construct_template;
 	GladeWidgetInfo   *construct_info;
@@ -326,6 +328,12 @@ void                    glade_widget_pus
 LIBGLADEUI_API 
 void                    glade_widget_pop_superuser          (void);
 
+LIBGLADEUI_API
+void                    glade_widget_add_internals          (GladeWidget *parent,
+							     GtkWidget *internal,
+							     const gchar *name,
+							     ...);
+
 G_END_DECLS
 
 #endif /* __GLADE_WIDGET_H__ */
Index: gladeui/glade-widget-adaptor.c
===================================================================
--- gladeui/glade-widget-adaptor.c	(revision 1244)
+++ gladeui/glade-widget-adaptor.c	(working copy)
@@ -351,6 +351,13 @@ gwa_clone_parent_properties (GladeWidget
 	return g_list_reverse (properties);
 }
 
+static gint
+gwa_props_cmp (gconstpointer a, gconstpointer b)
+{
+	const GladePropertyClass *class_a = a, *class_b = b;
+	return strcmp (class_a->id, class_b->id);
+}
+
 static void
 gwa_setup_introspected_props_from_pspecs (GladeWidgetAdaptor   *adaptor,
 					  GParamSpec          **specs,
@@ -386,14 +393,12 @@ gwa_setup_introspected_props_from_pspecs
 			list = g_list_prepend (list, property_class);
 	}
 
+	list = g_list_sort (list, gwa_props_cmp);
+	
 	if (is_packing)
-		adaptor->packing_props =
-			g_list_concat (adaptor->packing_props, 
-				       g_list_reverse (list));
+		adaptor->packing_props = g_list_concat (adaptor->packing_props, list);
 	else
-		adaptor->properties =
-			g_list_concat (adaptor->properties, 
-				       g_list_reverse (list));
+		adaptor->properties = g_list_concat (adaptor->properties, list);
 }
 
 /* XXX Atk relations and accel props disregarded - they should
@@ -2041,7 +2046,21 @@ glade_widget_adaptor_get_internal_child 
 	g_return_val_if_fail (G_IS_OBJECT (object), NULL);
 	g_return_val_if_fail (internal_name != NULL, NULL);
 	g_return_val_if_fail (g_type_is_a (G_OBJECT_TYPE (object), adaptor->type), NULL);
+	GladeWidget *widget = glade_widget_get_from_gobject (object);
 
+	printf ("glade_widget_adaptor_get_internal_child %s %p\n",widget->name, widget->internals);
+	if (widget && widget->internals)
+	{
+		GList *l;
+		for (l = widget->internals; l && l->data; l = g_list_next (l))
+		{
+			GladeWidget *internal = glade_widget_get_from_gobject (l->data);
+			printf ("glade_widget_adaptor_get_internal_child %s %s\n",internal_name, internal->internal);
+			if (internal && strcmp (internal_name, internal->internal) == 0)
+				return internal->object;
+		}
+	}
+	
 	if (GLADE_WIDGET_ADAPTOR_GET_CLASS (adaptor)->get_internal_child)
 		return GLADE_WIDGET_ADAPTOR_GET_CLASS
 			(adaptor)->get_internal_child (adaptor, object, internal_name);
@@ -2211,6 +2230,33 @@ glade_widget_adaptor_remove (GladeWidget
 		g_critical ("No remove() support in adaptor %s", adaptor->name);
 }
 
+static gboolean
+glade_widget_adaptor_has_child_hierarchy (GladeWidget *widget,
+					  GObject *child)
+{
+	GList *list, *children = NULL;
+	gboolean found = FALSE;
+
+	children = glade_util_container_get_all_children (GTK_CONTAINER(widget->object));
+
+	for (list = children; list && list->data; list = list->next)
+	{
+		GladeWidget *gwidget = glade_widget_get_from_gobject (list->data);
+		
+		if (gwidget && GTK_IS_CONTAINER (gwidget->object))
+			found = glade_widget_adaptor_has_child_hierarchy (gwidget, child);
+		
+		if (list->data == child)
+		{
+			found = TRUE;
+			break;
+		}
+	}
+
+	g_list_free (children);
+	return found;
+}
+
 /**
  * glade_widget_adaptor_remove:
  * @adaptor:   A #GladeWidgetAdaptor
@@ -2224,17 +2270,32 @@ GList *
 glade_widget_adaptor_get_children (GladeWidgetAdaptor *adaptor,
 				   GObject            *container)
 {
+	GladeWidget *widget;
+	GList *l, *children;
+	
 	g_return_val_if_fail (GLADE_IS_WIDGET_ADAPTOR (adaptor), NULL);
 	g_return_val_if_fail (G_IS_OBJECT (container), NULL);
 	g_return_val_if_fail (g_type_is_a (G_OBJECT_TYPE (container), adaptor->type), NULL);
-
+/*
 	if (GLADE_WIDGET_ADAPTOR_GET_CLASS (adaptor)->get_children)
-		return GLADE_WIDGET_ADAPTOR_GET_CLASS
+		children = GLADE_WIDGET_ADAPTOR_GET_CLASS
 			(adaptor)->get_children (adaptor, container);
-
+	else
+		children = NULL;*/
+	
+	children = glade_util_container_get_all_children (GTK_CONTAINER (container));
+	
 	/* Dont complain here if no implementation is found */
 
-	return NULL;
+	if ((widget = glade_widget_get_from_gobject (container)) == NULL)
+		return children;
+	
+	for (l = widget->internals; l && l->data; l = g_list_next (l))
+		if (g_list_find (children, G_OBJECT (l->data)) == NULL &&
+		    glade_widget_adaptor_has_child_hierarchy (widget, G_OBJECT (l->data)) == FALSE)
+			children = g_list_append (children, G_OBJECT (l->data));
+
+	return children;
 }
 
 /**
_______________________________________________
Glade-devel maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel

Reply via email to