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, Lluis.
Index: src/glade-parser.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-parser.c,v retrieving revision 1.7 diff -u -r1.7 glade-parser.c --- src/glade-parser.c 27 Dec 2005 22:16:37 -0000 1.7 +++ src/glade-parser.c 17 Jan 2006 11:27:11 -0000 @@ -432,12 +432,7 @@ state->widget_depth = 0; state->content = g_string_sized_new(128); - state->interface = g_new0(GladeInterface, 1); - state->interface->names = g_hash_table_new(g_str_hash, g_str_equal); - state->interface->strings = g_hash_table_new_full(g_str_hash, - g_str_equal, - (GDestroyNotify)g_free, - NULL); + state->interface = glade_interface_new (); state->widget = NULL; state->prop_type = PROP_NONE; @@ -1109,6 +1104,24 @@ } g_free(info->children); g_free(info); +} + +/** + * glade_interface_new + * + * Creates a GladeInterface structure. + */ +GladeInterface * +glade_interface_new () +{ + GladeInterface *interface; + interface = g_new0 (GladeInterface, 1); + interface->names = g_hash_table_new (g_str_hash, g_str_equal); + interface->strings = g_hash_table_new_full (g_str_hash, + g_str_equal, + (GDestroyNotify)g_free, + NULL); + return interface; } /** Index: src/glade-parser.h =================================================================== RCS file: /cvs/gnome/glade3/src/glade-parser.h,v retrieving revision 1.5 diff -u -r1.5 glade-parser.h --- src/glade-parser.h 27 Dec 2005 22:16:37 -0000 1.5 +++ src/glade-parser.h 17 Jan 2006 11:27:12 -0000 @@ -128,6 +128,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-project.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-project.c,v retrieving revision 1.76 diff -u -r1.76 glade-project.c --- src/glade-project.c 15 Jan 2006 21:14:55 -0000 1.76 +++ src/glade-project.c 17 Jan 2006 11:27:15 -0000 @@ -730,14 +730,9 @@ GList *list, *tops = NULL; guint i; - interface = g_new0 (GladeInterface, 1); - interface->names = g_hash_table_new (g_str_hash, g_str_equal); - interface->strings = g_hash_table_new_full (g_str_hash, - g_str_equal, - (GDestroyNotify)g_free, - NULL); + interface = glade_interface_new (); - for (i = 0, list = project->objects; list; list = list->next) + for (i = 0, list = project->objects; list; list = list->next) { GladeWidget *widget; GladeWidgetInfo *info;
Index: src/glade-widget.c =================================================================== RCS file: /cvs/gnome/glade3/src/glade-widget.c,v retrieving revision 1.153 diff -u -r1.153 glade-widget.c --- src/glade-widget.c 15 Jan 2006 21:14:56 -0000 1.153 +++ src/glade-widget.c 17 Jan 2006 11:28:29 -0000 @@ -1822,12 +1822,16 @@ glade_widget_retrieve_from_position (GtkWidget *base, int x, int y) { GtkWidget *toplevel_widget; + GtkWidget *next_widget; gint top_x; gint top_y; - toplevel_widget = gtk_widget_get_toplevel (base); - if (!GTK_WIDGET_TOPLEVEL (toplevel_widget)) - return NULL; + next_widget = base; + toplevel_widget = base; + while (next_widget && glade_widget_get_from_gobject (next_widget)) { + toplevel_widget = next_widget; + next_widget = gtk_widget_get_parent (next_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 - Glade-devel@lists.ximian.com http://lists.ximian.com/mailman/listinfo/glade-devel