summaryrefslogtreecommitdiff
path: root/gtk/gtkbuilder.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2019-11-25 06:06:31 +0100
committerBenjamin Otte <otte@redhat.com>2019-12-03 18:12:25 +0100
commitbfe42558072acff476e1ace0cfe7b277070bfee7 (patch)
treee279d8dbbef04e2e0877d50bcf99101a4d6141e7 /gtk/gtkbuilder.c
parenta15fb95c46e568326540e78772de95082472dfd4 (diff)
downloadgtk+-bfe42558072acff476e1ace0cfe7b277070bfee7.tar.gz
builder: Allow objects in gtk_builder_value_from_string_type()
Instead of throwing an error, lookup objects with gtk_builder_get_object().
Diffstat (limited to 'gtk/gtkbuilder.c')
-rw-r--r--gtk/gtkbuilder.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c
index 1b39f30d09..8f6935c696 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))