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