[gtk/wip/otte/listview: 3/151] builder: Allow objects in gtk_builder_value_from_string_type()



commit 11d9e8d8a0f50d875ac02904aaf42def08066965
Author: Benjamin Otte <otte redhat com>
Date:   Mon Nov 25 06:06:31 2019 +0100

    builder: Allow objects in gtk_builder_value_from_string_type()
    
    Instead of throwing an error, lookup objects with
    gtk_builder_get_object().

 gtk/gtkbuilder.c | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
---
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 118308a7bf..8bcf58134e 100644
--- a/gtk/gtkbuilder.c
+++ b/gtk/gtkbuilder.c
@@ -2167,7 +2167,31 @@ gtk_builder_value_from_string_type (GtkBuilder   *builder,
           ret = TRUE;
         }
       else
-        ret = FALSE;
+        {
+          GObject *object = g_hash_table_lookup (priv->objects, string);
+
+          if (object && g_value_type_compatible (G_OBJECT_TYPE (object), type))
+            {
+              g_value_set_object (value, object);
+            }
+          else if (object)
+            {
+              g_set_error (error,
+                           GTK_BUILDER_ERROR,
+                           GTK_BUILDER_ERROR_INVALID_VALUE,
+                           "Object named \"%s\" is of type \"%s\" which is not compatible with expected type 
\%s\"",
+                           string, G_OBJECT_TYPE_NAME (object), g_type_name (type));
+              ret = FALSE;
+            }
+          else
+            {
+              g_set_error (error,
+                           GTK_BUILDER_ERROR,
+                           GTK_BUILDER_ERROR_INVALID_VALUE,
+                           "No object named \"%s\"", string);
+              ret = FALSE;
+            }
+        }
       break;
     case G_TYPE_POINTER:
       if (G_VALUE_HOLDS (value, G_TYPE_GTYPE))


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