[gtk+] GtkBuilder: Report 'invalid ID' errors
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] GtkBuilder: Report 'invalid ID' errors
- Date: Tue, 28 Apr 2015 03:11:12 +0000 (UTC)
commit 5bd0ec6381f7c2412e540d4b23c1152081bb5292
Author: Matthias Clasen <mclasen redhat com>
Date: Mon Apr 27 22:56:53 2015 -0400
GtkBuilder: Report 'invalid ID' errors
Look for a stashed GError after calling custom_tag_end,
custom_finished or parser_finished vfuncs, and report
them up.
gtk/gtkbuilderparser.c | 39 +++++++++++++++++++++++++++++++++++++--
1 files changed, 37 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkbuilderparser.c b/gtk/gtkbuilderparser.c
index 3a42044..d90038a 100644
--- a/gtk/gtkbuilderparser.c
+++ b/gtk/gtkbuilderparser.c
@@ -941,13 +941,20 @@ subparser_end (GMarkupParseContext *context,
ParserData *data,
GError **error)
{
+ GError *lookup_error;
+
if (data->subparser->parser->end_element)
data->subparser->parser->end_element (context, element_name,
data->subparser->data, error);
+ if (*error)
+ return;
+
if (strcmp (data->subparser->start, element_name) != 0)
return;
+ g_object_set_data (G_OBJECT (data->builder), "lookup-error", NULL);
+
gtk_buildable_custom_tag_end (GTK_BUILDABLE (data->subparser->object),
data->builder,
data->subparser->child,
@@ -955,6 +962,13 @@ subparser_end (GMarkupParseContext *context,
data->subparser->data);
g_free (data->subparser->parser);
+ lookup_error = (GError*) g_object_steal_data (G_OBJECT (data->builder), "lookup-error");
+ if (lookup_error)
+ {
+ g_propagate_error (error, lookup_error);
+ return;
+ }
+
if (GTK_BUILDABLE_GET_IFACE (data->subparser->object)->custom_finished)
data->custom_finalizers = g_slist_prepend (data->custom_finalizers,
data->subparser);
@@ -1385,20 +1399,41 @@ _gtk_builder_parser_parse_buffer (GtkBuilder *builder,
for (l = data->custom_finalizers; l; l = l->next)
{
SubParser *sub = (SubParser*)l->data;
-
+ GError *lookup_error;
+
+ g_object_set_data (G_OBJECT (builder), "lookup-error", NULL);
+
gtk_buildable_custom_finished (GTK_BUILDABLE (sub->object),
builder,
sub->child,
sub->tagname,
sub->data);
+
+ lookup_error = (GError*) g_object_steal_data (G_OBJECT (builder), "lookup-error");
+ if (lookup_error)
+ {
+ g_propagate_error (error, lookup_error);
+ goto out;
+ }
}
-
+
/* Common parser_finished, for all created objects */
data->finalizers = g_slist_reverse (data->finalizers);
for (l = data->finalizers; l; l = l->next)
{
GtkBuildable *buildable = (GtkBuildable*)l->data;
+ GError *lookup_error;
+
+ g_object_set_data (G_OBJECT (builder), "lookup-error", NULL);
+
gtk_buildable_parser_finished (GTK_BUILDABLE (buildable), builder);
+
+ lookup_error = (GError*) g_object_steal_data (G_OBJECT (builder), "lookup-error");
+ if (lookup_error)
+ {
+ g_propagate_error (error, lookup_error);
+ goto out;
+ }
}
out:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]