summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Dahlin <jdahlin@async.com.br>2007-10-24 11:48:17 +0000
committerJohan Dahlin <johan@src.gnome.org>2007-10-24 11:48:17 +0000
commitfa13277655e14d2ecc291f8083580058456c2dad (patch)
tree8fd477d08b151233d653001c68c3104f51646eec
parent1d332bbb44f68165b46c119cd281774ea76d1a31 (diff)
downloadgdk-pixbuf-fa13277655e14d2ecc291f8083580058456c2dad.tar.gz
Parse signals after <child> tags and add tests. (#468793, Benjamin Otte)
2007-10-24 Johan Dahlin <jdahlin@async.com.br> * gtk/gtkbuilder.c: (_gtk_builder_construct), (_gtk_builder_add_signals): * gtk/gtkbuilderparser.c: (end_element): * gtk/gtkbuilderprivate.h: * tests/buildertest.c: (test_connect_signals): Parse signals after <child> tags and add tests. (#468793, Benjamin Otte) svn path=/trunk/; revision=18944
-rw-r--r--ChangeLog11
-rw-r--r--gtk/gtkbuilder.c10
-rw-r--r--gtk/gtkbuilderparser.c2
-rw-r--r--gtk/gtkbuilderprivate.h2
-rw-r--r--tests/buildertest.c22
5 files changed, 45 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 6ed403f7c..d73a15a74 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2007-10-24 Johan Dahlin <jdahlin@async.com.br>
+ * gtk/gtkbuilder.c: (_gtk_builder_construct),
+ (_gtk_builder_add_signals):
+ * gtk/gtkbuilderparser.c: (end_element):
+ * gtk/gtkbuilderprivate.h:
+ * tests/buildertest.c: (test_connect_signals):
+
+ Parse signals after <child> tags and add tests.
+ (#468793, Benjamin Otte)
+
+2007-10-24 Johan Dahlin <jdahlin@async.com.br>
+
* gtk/gtkbuilderparser.c (end_element): Allow empty property nodes
so we can set empty strings. (#486420, Xavier Claessens)
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 5f4566dbe..1ab9acbca 100644
--- a/gtk/gtkbuilder.c
+++ b/gtk/gtkbuilder.c
@@ -497,8 +497,6 @@ _gtk_builder_construct (GtkBuilder *builder,
}
g_hash_table_insert (builder->priv->objects, g_strdup (info->id), obj);
- builder->priv->signals = g_slist_concat (builder->priv->signals,
- g_slist_copy (info->signals));
return obj;
}
@@ -545,6 +543,14 @@ _gtk_builder_add (GtkBuilder *builder,
child_info->added = TRUE;
}
+void
+_gtk_builder_add_signals (GtkBuilder *builder,
+ GSList *signals)
+{
+ builder->priv->signals = g_slist_concat (builder->priv->signals,
+ g_slist_copy (signals));
+}
+
static void
apply_delayed_properties (const gchar *window_name,
GSList *props,
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index af3a826fd..3ca1d3c31 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -774,6 +774,8 @@ end_element (GMarkupParseContext *context,
if (GTK_IS_BUILDABLE (object_info->object) &&
GTK_BUILDABLE_GET_IFACE (object_info->object)->parser_finished)
data->finalizers = g_slist_prepend (data->finalizers, object_info->object);
+ _gtk_builder_add_signals (data->builder, object_info->signals);
+
free_object_info (object_info);
}
else if (strcmp (element_name, "property") == 0)
diff --git a/gtk/gtkbuilderprivate.h b/gtk/gtkbuilderprivate.h
index 1c3f18e68..8277fa792 100644
--- a/gtk/gtkbuilderprivate.h
+++ b/gtk/gtkbuilderprivate.h
@@ -105,6 +105,8 @@ GObject * _gtk_builder_construct (GtkBuilder *builder,
ObjectInfo *info);
void _gtk_builder_add (GtkBuilder *builder,
ChildInfo *child_info);
+void _gtk_builder_add_signals (GtkBuilder *builder,
+ GSList *signals);
void _gtk_builder_finish (GtkBuilder *builder);
void _free_signal_info (SignalInfo *info,
gpointer user_data);
diff --git a/tests/buildertest.c b/tests/buildertest.c
index 72b25e033..079e12d28 100644
--- a/tests/buildertest.c
+++ b/tests/buildertest.c
@@ -189,6 +189,15 @@ gboolean test_connect_signals (void)
" <signal name=\"notify::title\" handler=\"signal_extra2\"/>"
" </object>"
"</interface>";
+ const gchar buffer_after_child[] =
+ "<interface>"
+ " <object class=\"GtkWindow\" id=\"window1\">"
+ " <child>"
+ " <object class=\"GtkButton\" id=\"button1\"/>"
+ " </child>"
+ " <signal name=\"notify::title\" handler=\"signal_normal\"/>"
+ " </object>"
+ "</interface>";
builder = builder_new_from_string (buffer, -1, NULL);
gtk_builder_connect_signals (builder, NULL);
@@ -229,6 +238,19 @@ gboolean test_connect_signals (void)
g_object_unref (builder);
+ /* new test, reset globals */
+ after = 0;
+ normal = 0;
+
+ builder = builder_new_from_string (buffer_after_child, -1, NULL);
+ window = gtk_builder_get_object (builder, "window1");
+ gtk_builder_connect_signals (builder, NULL);
+ gtk_window_set_title (GTK_WINDOW (window), "test");
+
+ g_return_val_if_fail (normal == 1, FALSE);
+ gtk_widget_destroy (GTK_WIDGET (window));
+ g_object_unref (builder);
+
return TRUE;
}