diff options
author | Benjamin Otte <otte@redhat.com> | 2019-11-25 06:06:31 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2019-12-03 18:12:25 +0100 |
commit | bfe42558072acff476e1ace0cfe7b277070bfee7 (patch) | |
tree | e279d8dbbef04e2e0877d50bcf99101a4d6141e7 /gtk/gtkbuilder.c | |
parent | a15fb95c46e568326540e78772de95082472dfd4 (diff) | |
download | gtk+-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.c | 26 |
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)) |