diff options
author | Debarshi Ray <debarshir@gnome.org> | 2017-08-28 18:58:50 +0200 |
---|---|---|
committer | Debarshi Ray <debarshir@gnome.org> | 2017-08-29 15:42:56 +0200 |
commit | a827e9222627b0462ae4c6bd063bf922faf4277a (patch) | |
tree | a98b3dbb96f92e0c72e92ad20acabb3d9459e023 | |
parent | bbb233464cc45166a8f70b9d2de481b0b38ce6f0 (diff) | |
download | gtk+-a827e9222627b0462ae4c6bd063bf922faf4277a.tar.gz |
GtkBuilder: Prefer "type-func" over "class" when looking for the GType
https://bugzilla.gnome.org/show_bug.cgi?id=786932
-rw-r--r-- | gtk/gtkbuilderparser.c | 26 | ||||
-rw-r--r-- | testsuite/gtk/builder.c | 12 |
2 files changed, 24 insertions, 14 deletions
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index 798f29fd7c..121935502e 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -268,34 +268,34 @@ parse_object (GMarkupParseContext *context, return; } - if (object_class) + if (type_func) { - object_type = gtk_builder_get_type_from_name (data->builder, object_class); + /* Call the GType function, and return the GType, it's guaranteed afterwards + * that g_type_from_name on the name will return our GType + */ + object_type = _get_type_by_symbol (type_func); if (object_type == G_TYPE_INVALID) { g_set_error (error, GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_VALUE, - "Invalid object type '%s'", object_class); + GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION, + "Invalid type function '%s'", type_func); _gtk_builder_prefix_error (data->builder, context, error); return; - } + } } - else if (type_func) + else if (object_class) { - /* Call the GType function, and return the GType, it's guaranteed afterwards - * that g_type_from_name on the name will return our GType - */ - object_type = _get_type_by_symbol (type_func); + object_type = gtk_builder_get_type_from_name (data->builder, object_class); if (object_type == G_TYPE_INVALID) { g_set_error (error, GTK_BUILDER_ERROR, - GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION, - "Invalid type function '%s'", type_func); + GTK_BUILDER_ERROR_INVALID_VALUE, + "Invalid object type '%s'", object_class); _gtk_builder_prefix_error (data->builder, context, error); return; - } + } } else { diff --git a/testsuite/gtk/builder.c b/testsuite/gtk/builder.c index 9aad57aa21..339ad110b2 100644 --- a/testsuite/gtk/builder.c +++ b/testsuite/gtk/builder.c @@ -763,6 +763,10 @@ test_types (void) "</interface>"; const gchar buffer3[] = "<interface>" + " <object class=\"XXXInvalidType\" type-func=\"gtk_window_get_type\" id=\"window\"/>" + "</interface>"; + const gchar buffer4[] = + "<interface>" " <object type-func=\"xxx_invalid_get_type_function\" id=\"window\"/>" "</interface>"; GtkBuilder *builder; @@ -779,10 +783,16 @@ test_types (void) g_assert (GTK_IS_WINDOW (window)); gtk_widget_destroy (GTK_WIDGET (window)); g_object_unref (builder); + + builder = builder_new_from_string (buffer3, -1, NULL); + window = gtk_builder_get_object (builder, "window"); + g_assert (GTK_IS_WINDOW (window)); + gtk_widget_destroy (GTK_WIDGET (window)); + g_object_unref (builder); error = NULL; builder = gtk_builder_new (); - gtk_builder_add_from_string (builder, buffer3, -1, &error); + gtk_builder_add_from_string (builder, buffer4, -1, &error); g_assert_error (error, GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_TYPE_FUNCTION); g_error_free (error); g_object_unref (builder); |