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

Reply via email to