Hi!

I updated the patch following your instructions. I hope it's ok now.
Lluis.

El mar, 17-01-2006 a las 14:04 -0500, Tristan Van Berkom escribió:
> Lluis Sanchez wrote:
> > Hi,
> > 
> > This patch adds a glade_interface_new() method which factorizes some
> > GladeInterface creation code used in a couple of files.
> > 
> > I'm also resending the patch that makes it possible to embed design
> > windows into a container window. I know this patch is not a complete
> > solution for the embedding issue, but it is a needed step.
> > 
> > It would be awesome if those patches could be included in the next
> > public snapshot.
> > 
> 
> Thanks for the interface patch :)
> 
> I tested your patch to glade-widget.c and didn't find any
> regressions, so I am willing to add the patch to glade-3,
> but not in it's incomplete state; let me explain:
> 
> Your patch special-cases the glade_widget_button_press code
> so that it will detect top-level GladeWidgets without using
> GTK_WIDGET_TOPLEVEL; that doesn't mean that glade-3 will
> work properly with toplevels that dont bear the toplevel flag;
> a quick `grep GTK_WIDGET_TOPLEVEL glade3/src/*' will tell you
> that.
> 
> What I think we need is:
>      o Add: gboolean glade_util_is_toplevel (GladeWidget);
>      o Adjust all code that was GTK_WIDGET_TOPLEVEL() to use
>        the new glade-utils function instead (only where appropriate
>        ofcourse), also taking into consideration that top-level project
>        objects are not always GtkWidget (could be GtkAdjustment or
>        GtkSizeGroup).
> 
> Since you're looking at that code; I thought you might want
> to cast a passing glance at this:
>      http://bugzilla.gnome.org/show_bug.cgi?id=327379
> 
> Cheers,
>                                -Tristan
? compile
? depcomp
? install-sh
? interface.diff
? top.diff
? widget.diff
? po/.intltool-merge-cache
? src/glade-gtk.lo
? src/libgladegtk.la
? src/libgladeui-1.la
? src/libgladeui_1_la-glade-accumulators.lo
? src/libgladeui_1_la-glade-app.lo
? src/libgladeui_1_la-glade-builtins.lo
? src/libgladeui_1_la-glade-catalog.lo
? src/libgladeui_1_la-glade-clipboard-view.lo
? src/libgladeui_1_la-glade-clipboard.lo
? src/libgladeui_1_la-glade-command.lo
? src/libgladeui_1_la-glade-cursor.lo
? src/libgladeui_1_la-glade-debug.lo
? src/libgladeui_1_la-glade-editor-property.lo
? src/libgladeui_1_la-glade-editor.lo
? src/libgladeui_1_la-glade-fixed-manager.lo
? src/libgladeui_1_la-glade-id-allocator.lo
? src/libgladeui_1_la-glade-marshallers.lo
? src/libgladeui_1_la-glade-palette.lo
? src/libgladeui_1_la-glade-parameter.lo
? src/libgladeui_1_la-glade-parser.lo
? src/libgladeui_1_la-glade-placeholder.lo
? src/libgladeui_1_la-glade-popup.lo
? src/libgladeui_1_la-glade-project-view.lo
? src/libgladeui_1_la-glade-project.lo
? src/libgladeui_1_la-glade-property-class.lo
? src/libgladeui_1_la-glade-property.lo
? src/libgladeui_1_la-glade-signal-editor.lo
? src/libgladeui_1_la-glade-signal.lo
? src/libgladeui_1_la-glade-utils.lo
? src/libgladeui_1_la-glade-widget-class.lo
? src/libgladeui_1_la-glade-widget.lo
? src/libgladeui_1_la-glade-xml-utils.lo
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/glade3/ChangeLog,v
retrieving revision 1.434
diff -u -r1.434 ChangeLog
--- ChangeLog	17 Jan 2006 21:55:23 -0000	1.434
+++ ChangeLog	18 Jan 2006 17:22:04 -0000
@@ -1,3 +1,13 @@
+2006-01-18  Lluis Sanchez Gual <[EMAIL PROTECTED]>
+
+	* glade-utils.c: Created glade_util_is_toplevel, which replaces
+	  calls to GTK_WIDGET_TOPLEVEL and works for embedded windows.
+
+	* src/glade-command.c, src/glade-popup.c, src/glade-widget.c:
+	  Use glade_util_is_toplevel instead of GTK_WIDGET_TOPLEVEL.
+
+	* src/glade-parser.h: Added glade_interface_new().
+
 2006-01-17  Tristan Van Berkom <[EMAIL PROTECTED]>
 
 	* src/glade-app.c: Fixed bug where widgets weren't selectable
Index: src/glade-command.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-command.c,v
retrieving revision 1.53
diff -u -r1.53 glade-command.c
--- src/glade-command.c	28 Dec 2005 03:25:52 -0000	1.53
+++ src/glade-command.c	18 Jan 2006 17:22:05 -0000
@@ -1199,7 +1199,7 @@
 
 			/* Toplevels get pasted to the active project */
 			if (me->from_clipboard && 
-			    GTK_WIDGET_TOPLEVEL (cdata->widget->object))
+			    glade_util_is_toplevel (cdata->widget))
 				glade_project_add_object 
 					(project, cdata->widget->object);
 			else
@@ -1423,7 +1423,7 @@
 		{
 			widget = list->data;
 			if (parent == NULL &&
-			    GTK_WIDGET_TOPLEVEL (widget->object) == FALSE)
+			    glade_util_is_toplevel (widget) == FALSE)
 			{
 				glade_util_ui_warn 
 					(glade_default_app_get_window(), 
@@ -1433,7 +1433,7 @@
 			}
 
 			if (placeholder &&
-			    GTK_WIDGET_TOPLEVEL (widget->object))
+			    glade_util_is_toplevel (widget))
 			{
 				glade_util_ui_warn 
 					(glade_default_app_get_window(), 
@@ -1492,7 +1492,7 @@
 			cdata->parent = glade_widget_get_parent (widget);
 		else if (type == GLADE_PASTE && placeholder)
 			cdata->parent = glade_placeholder_get_parent (placeholder);
-		else if (GTK_WIDGET_TOPLEVEL (widget->object) == FALSE)
+		else if (glade_util_is_toplevel (widget) == FALSE)
 			cdata->parent = parent;
 
 		/* Placeholder */
Index: src/glade-parser.h
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-parser.h,v
retrieving revision 1.6
diff -u -r1.6 glade-parser.h
--- src/glade-parser.h	17 Jan 2006 17:57:35 -0000	1.6
+++ src/glade-parser.h	18 Jan 2006 17:22:05 -0000
@@ -129,6 +129,7 @@
 					   const gchar *domain);
 GladeInterface *glade_parser_parse_buffer (const gchar *buffer, gint len,
 					   const gchar *domain);
+GladeInterface *glade_interface_new ();
 void            glade_interface_destroy   (GladeInterface  *interface);
 void            glade_interface_dump      (GladeInterface  *interface,
 					   const gchar     *filename);
Index: src/glade-popup.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-popup.c,v
retrieving revision 1.27
diff -u -r1.27 glade-popup.c
--- src/glade-popup.c	9 Dec 2005 03:49:52 -0000	1.27
+++ src/glade-popup.c	18 Jan 2006 17:22:05 -0000
@@ -321,7 +321,7 @@
 	
 	popup_menu = gtk_menu_new ();
 
-	if (GTK_WIDGET_TOPLEVEL (glade_widget_get_object (widget)))
+	if (glade_util_is_toplevel (widget))
 	{
 		glade_popup_append_item (popup_menu, GTK_STOCK_PASTE, 
 					 NULL, TRUE,
Index: src/glade-utils.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-utils.c,v
retrieving revision 1.53
diff -u -r1.53 glade-utils.c
--- src/glade-utils.c	9 Dec 2005 03:49:52 -0000	1.53
+++ src/glade-utils.c	18 Jan 2006 17:22:05 -0000
@@ -1077,7 +1077,7 @@
 	{
 		widget = list->data;
 
-		if (GTK_WIDGET_TOPLEVEL (widget->object) == FALSE && parent)
+		if (glade_util_is_toplevel (widget) == FALSE && parent)
 		{
 			/* Ensure a paste is supported
 			 */
@@ -1101,7 +1101,7 @@
 	g_assert (widget);
 
 	/* Ensure enough placeholders are available */
-	if (GTK_WIDGET_TOPLEVEL (widget->object) == FALSE &&
+	if (glade_util_is_toplevel (widget) == FALSE &&
 	    parent && parent->manager != NULL &&
 	    gtkcontainer_relations != 1) 
 	{
@@ -1340,3 +1340,26 @@
 
 	return g_list_reverse (newlist);
 }
+
+/**
+ * glade_util_is_toplevel:
+ * @widget: a #GladeWidget
+ *
+ * Checks if a Glade widget is a top level widget, taking into
+ * account that windows can be embedded in other windows.
+ *
+ * Returns: TRUE if @widget is a top level widget.
+ * 
+ */
+gboolean
+glade_util_is_toplevel (GladeWidget *widget)
+{
+	GtkWidget *parent_widget;
+	
+	if (!GTK_IS_WIDGET (widget->object))
+		return FALSE;
+
+	parent_widget = gtk_widget_get_parent (widget->object);
+	return parent_widget == NULL || glade_widget_get_from_gobject (parent_widget) == NULL; 
+}
+
Index: src/glade-utils.h
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-utils.h,v
retrieving revision 1.35
diff -u -r1.35 glade-utils.h
--- src/glade-utils.h	9 Dec 2005 03:49:52 -0000	1.35
+++ src/glade-utils.h	18 Jan 2006 17:22:05 -0000
@@ -79,6 +79,8 @@
 
 LIBGLADEUI_API GList            *glade_util_purify_list           (GList        *list);
 
+LIBGLADEUI_API gboolean          glade_util_is_toplevel           (GladeWidget *widget);
+
 G_END_DECLS
 
 #endif /* __GLADE_UTILS_H__ */
Index: src/glade-widget.c
===================================================================
RCS file: /cvs/gnome/glade3/src/glade-widget.c,v
retrieving revision 1.154
diff -u -r1.154 glade-widget.c
--- src/glade-widget.c	17 Jan 2006 17:57:35 -0000	1.154
+++ src/glade-widget.c	18 Jan 2006 17:22:05 -0000
@@ -820,7 +820,7 @@
 	 */
 	glade_widget_sync_custom_props (gwidget);
 
-	if (GTK_IS_WIDGET (gwidget->object) && !GTK_WIDGET_TOPLEVEL(gwidget->object))
+	if (GTK_IS_WIDGET (gwidget->object) && !glade_util_is_toplevel(gwidget))
 		gtk_widget_show_all (GTK_WIDGET (gwidget->object));
 	
 	return gwidget;
@@ -1822,12 +1822,17 @@
 glade_widget_retrieve_from_position (GtkWidget *base, int x, int y)
 {
 	GtkWidget *toplevel_widget;
+	GladeWidget *glade_widget;
 	gint top_x;
 	gint top_y;
 	
-	toplevel_widget = gtk_widget_get_toplevel (base);
-	if (!GTK_WIDGET_TOPLEVEL (toplevel_widget))
-		return NULL;
+	toplevel_widget = base;
+	glade_widget = glade_widget_get_from_gobject (base);
+	
+	while (!glade_util_is_toplevel (glade_widget)) {
+		toplevel_widget = gtk_widget_get_parent (glade_widget->object);
+		glade_widget = glade_widget_get_from_gobject (toplevel_widget);
+	}
 
 	gtk_widget_translate_coordinates (base, toplevel_widget, x, y, &top_x, &top_y);
 	return glade_widget_find_deepest_child_at_position
_______________________________________________
Glade-devel maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel

Reply via email to