diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-04-27 22:54:25 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-04-27 22:54:25 -0400 |
commit | fc83c8ac76b2a9ec13430dab530fa262aaaa9337 (patch) | |
tree | fe4c4b84745e2927ea25a552e804404ad5f9cc84 /gtk/gtkbuilder.c | |
parent | 1525d4ab89722a19129b1e2f11135fdb3e5fc58b (diff) | |
download | gtk+-fc83c8ac76b2a9ec13430dab530fa262aaaa9337.tar.gz |
GtkBuilder: Add new convenience API
Add a convenience function that is like gtk_builder_get_object()
but stashes away a GError if a lookup fails. To make the error
message informative, the function takes a line/column pair.
Doing things this way is necessary because the custom_tag_end,
custom_finished, and parser_finished vfuncs don't take a
GError parameter, despite being called from a place where
we can report a GError back.
Diffstat (limited to 'gtk/gtkbuilder.c')
-rw-r--r-- | gtk/gtkbuilder.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/gtk/gtkbuilder.c b/gtk/gtkbuilder.c index 6cd801c712..60b3b9a696 100644 --- a/gtk/gtkbuilder.c +++ b/gtk/gtkbuilder.c @@ -2706,3 +2706,43 @@ _gtk_builder_check_parent (GtkBuilder *builder, return FALSE; } + +/*< private > + * @builder: a #GtkBuilder + * @name: object name to look up + * @line: line number where @name was encountered + * @col: column number where @name was encountered + * + * Looks up an object by name. Similar to gtk_builder_get_object(), + * but sets an error if lookup fails during custom_tag_end, + * custom_finished or parser_finished vfuncs. + * + * The reason for doing things this way is that these vfuncs don't + * take a GError** parameter to return an error. + * + * Returns: the found object + */ +GObject * +_gtk_builder_lookup_object (GtkBuilder *builder, + const gchar *name, + gint line, + gint col) +{ + GObject *obj; + GError *error = NULL; + + obj = g_hash_table_lookup (builder->priv->objects, name); + error = (GError *) g_object_get_data (G_OBJECT (builder), "lookup-error"); + + if (!obj && !error) + { + g_set_error (&error, + GTK_BUILDER_ERROR, GTK_BUILDER_ERROR_INVALID_ID, + "%s:%d:%d Object with ID %s not found", + builder->priv->filename, line, col, name); + g_object_set_data_full (G_OBJECT (builder), "lookup-error", + error, (GDestroyNotify)g_error_free); + } + + return obj; +} |