[gtk+] GtkBuilder: Report 'invalid ID' errors



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]