[gtk+] GtkBuilder: Prefer "type-func" over "class" when looking for the GType



commit fd9aec27fce9629e889df57aaf04436b2739142b
Author: Debarshi Ray <debarshir gnome org>
Date:   Mon Aug 28 18:58:50 2017 +0200

    GtkBuilder: Prefer "type-func" over "class" when looking for the GType
    
    https://bugzilla.gnome.org/show_bug.cgi?id=786932

 gtk/gtkbuilderparser.c  |   26 +++++++++++++-------------
 testsuite/gtk/builder.c |   12 +++++++++++-
 2 files changed, 24 insertions(+), 14 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index 5dd6ed7..da890b4 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -279,34 +279,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 daec566..cd48b37 100644
--- a/testsuite/gtk/builder.c
+++ b/testsuite/gtk/builder.c
@@ -668,6 +668,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;
@@ -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);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]