diff options
-rw-r--r-- | gtk/gtkbuilderparser.c | 6 | ||||
-rw-r--r-- | gtk/tests/builder.c | 9 |
2 files changed, 12 insertions, 3 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index f6f12a5bf6..fa8942134d 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -404,7 +404,8 @@ parse_object (GMarkupParseContext *context, return; } - g_hash_table_insert (data->object_ids, object_id, GINT_TO_POINTER (line)); + + g_hash_table_insert (data->object_ids, g_strdup (object_id), GINT_TO_POINTER (line)); } static void @@ -1128,7 +1129,8 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder, data->builder = builder; data->filename = filename; data->domain = g_strdup (domain); - data->object_ids = g_hash_table_new (g_str_hash, g_str_equal); + data->object_ids = g_hash_table_new_full (g_str_hash, g_str_equal, + (GDestroyNotify)g_free, NULL); data->requested_objects = NULL; if (requested_objs) diff --git a/gtk/tests/builder.c b/gtk/tests/builder.c index f5a85ac4fa..2a653b5d79 100644 --- a/gtk/tests/builder.c +++ b/gtk/tests/builder.c @@ -116,6 +116,13 @@ test_parser (void) GTK_BUILDER_ERROR_INVALID_VALUE)); g_error_free (error); + error = NULL; + gtk_builder_add_from_string (builder, "<interface><object class=\"GtkButton\" id=\"a\"></object><object class=\"GtkButton\" id=\"a\"/></object></interface>", -1, &error); + g_assert (g_error_matches (error, + GTK_BUILDER_ERROR, + GTK_BUILDER_ERROR_DUPLICATE_ID)); + g_error_free (error); + g_object_unref (builder); } @@ -2172,7 +2179,7 @@ test_add_objects (void) " </object>" " <object class=\"GtkWindow\" id=\"window2\">" " <child>" - " <object class=\"GtkLabel\" id=\"label1\">" + " <object class=\"GtkLabel\" id=\"label3\">" " <property name=\"label\" translatable=\"no\">second label</property>" " </object>" " </child>" |