diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c index 5dd6ed72bc..da890b42e5 100644 --- a/gtk/gtkbuilderparser.c +++ b/gtk/gtkbuilderparser.c @@ -279,20 +279,7 @@ parse_object (GMarkupParseContext *context, return; } - if (object_class) - { - 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_VALUE, - "Invalid object type '%s'", object_class); - _gtk_builder_prefix_error (data->builder, context, error); - return; - } - } - else if (type_func) + if (type_func) { /* Call the GType function, and return the GType, it's guaranteed afterwards * that g_type_from_name on the name will return our GType @@ -308,6 +295,19 @@ parse_object (GMarkupParseContext *context, return; } } + else if (object_class) + { + 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_VALUE, + "Invalid object type '%s'", object_class); + _gtk_builder_prefix_error (data->builder, context, error); + return; + } + } else { error_missing_attribute (data, element_name, "class", error); diff --git a/testsuite/gtk/builder.c b/testsuite/gtk/builder.c index daec5666c5..cd48b370a0 100644 --- a/testsuite/gtk/builder.c +++ b/testsuite/gtk/builder.c @@ -667,6 +667,10 @@ test_types (void) " " ""; const gchar buffer3[] = + "" + " " + ""; + const gchar buffer4[] = "" " " ""; @@ -684,10 +688,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);