[gtk+] GtkTreeStore: Use the new helpers



commit cc478fbd6fb097e2759960656d3127e912fea7fa
Author: Matthias Clasen <mclasen redhat com>
Date:   Sun Apr 26 10:32:05 2015 -0400

    GtkTreeStore: Use the new helpers
    
    Use the new GtkBuilder helpers and g_markup_collect_attributes
    in all builder subparsers.

 gtk/gtktreestore.c |   90 ++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 60 insertions(+), 30 deletions(-)
---
diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c
index db3a3ff..294c719 100644
--- a/gtk/gtktreestore.c
+++ b/gtk/gtktreestore.c
@@ -23,6 +23,7 @@
 #include "gtktreedatalist.h"
 #include "gtktreednd.h"
 #include "gtkbuildable.h"
+#include "gtkbuilderprivate.h"
 #include "gtkdebug.h"
 #include "gtkintl.h"
 
@@ -3339,28 +3340,56 @@ typedef struct {
 } GSListSubParserData;
 
 static void
-tree_model_start_element (GMarkupParseContext *context,
-                         const gchar         *element_name,
-                         const gchar        **names,
-                         const gchar        **values,
-                         gpointer            user_data,
-                         GError            **error)
-{
-  guint i;
+tree_model_start_element (GMarkupParseContext  *context,
+                          const gchar          *element_name,
+                          const gchar         **names,
+                          const gchar         **values,
+                          gpointer              user_data,
+                          GError              **error)
+{
   GSListSubParserData *data = (GSListSubParserData*)user_data;
 
-  for (i = 0; names[i]; i++)
+  if (strcmp (element_name, "columns") == 0)
     {
-      if (strcmp (names[i], "type") == 0)
-       data->items = g_slist_prepend (data->items, g_strdup (values[i]));
+      if (!_gtk_builder_check_parent (data->builder, context, "object", error))
+        return;
+
+      if (!g_markup_collect_attributes (element_name, names, values, error,
+                                        G_MARKUP_COLLECT_INVALID, NULL, NULL,
+                                        G_MARKUP_COLLECT_INVALID))
+        _gtk_builder_prefix_error (data->builder, context, error);
+
+    }
+  else if (strcmp (element_name, "column") == 0)
+    {
+      const gchar *type;
+
+      if (!_gtk_builder_check_parent (data->builder, context, "columns", error))
+        return;
+
+      if (!g_markup_collect_attributes (element_name, names, values, error,
+                                        G_MARKUP_COLLECT_STRING, "type", &type,
+                                        G_MARKUP_COLLECT_INVALID))
+        {
+          _gtk_builder_prefix_error (data->builder, context, error);
+          return;
+        }
+
+      data->items = g_slist_prepend (data->items, g_strdup (type));
+    }
+  else
+    {
+      _gtk_builder_error_unhandled_tag (data->builder, context,
+                                        "GtkTreeStore", element_name,
+                                        error);
     }
 }
 
 static void
-tree_model_end_element (GMarkupParseContext *context,
-                       const gchar         *element_name,
-                       gpointer             user_data,
-                       GError             **error)
+tree_model_end_element (GMarkupParseContext  *context,
+                        const gchar          *element_name,
+                        gpointer              user_data,
+                        GError              **error)
 {
   GSListSubParserData *data = (GSListSubParserData*)user_data;
 
@@ -3407,26 +3436,27 @@ static const GMarkupParser tree_model_parser =
 
 static gboolean
 gtk_tree_store_buildable_custom_tag_start (GtkBuildable  *buildable,
-                                          GtkBuilder    *builder,
-                                          GObject       *child,
-                                          const gchar   *tagname,
-                                          GMarkupParser *parser,
-                                          gpointer      *data)
+                                           GtkBuilder    *builder,
+                                           GObject       *child,
+                                           const gchar   *tagname,
+                                           GMarkupParser *parser,
+                                           gpointer      *parser_data)
 {
-  GSListSubParserData *parser_data;
+  GSListSubParserData *data;
 
   if (child)
     return FALSE;
 
   if (strcmp (tagname, "columns") == 0)
     {
-      parser_data = g_slice_new0 (GSListSubParserData);
-      parser_data->builder = builder;
-      parser_data->items = NULL;
-      parser_data->object = G_OBJECT (buildable);
+      data = g_slice_new0 (GSListSubParserData);
+      data->builder = builder;
+      data->items = NULL;
+      data->object = G_OBJECT (buildable);
 
       *parser = tree_model_parser;
-      *data = parser_data;
+      *parser_data = data;
+
       return TRUE;
     }
 
@@ -3435,10 +3465,10 @@ gtk_tree_store_buildable_custom_tag_start (GtkBuildable  *buildable,
 
 static void
 gtk_tree_store_buildable_custom_finished (GtkBuildable *buildable,
-                                         GtkBuilder   *builder,
-                                         GObject      *child,
-                                         const gchar  *tagname,
-                                         gpointer      user_data)
+                                          GtkBuilder   *builder,
+                                          GObject      *child,
+                                          const gchar  *tagname,
+                                          gpointer      user_data)
 {
   GSListSubParserData *data;
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]