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 - [email protected]
http://lists.ximian.com/mailman/listinfo/glade-devel