mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-07 11:20:09 +00:00
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.
This commit is contained in:
parent
1525d4ab89
commit
fc83c8ac76
@ -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;
|
||||
}
|
||||
|
@ -197,5 +197,10 @@ gboolean _gtk_builder_check_parent (GtkBuilder *builder,
|
||||
GMarkupParseContext *context,
|
||||
const gchar *parent_name,
|
||||
GError **error);
|
||||
GObject * _gtk_builder_lookup_object (GtkBuilder *builder,
|
||||
const gchar *name,
|
||||
gint line,
|
||||
gint col);
|
||||
|
||||
|
||||
#endif /* __GTK_BUILDER_PRIVATE_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user