From cc478fbd6fb097e2759960656d3127e912fea7fa Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 26 Apr 2015 10:32:05 -0400 Subject: GtkTreeStore: Use the new helpers Use the new GtkBuilder helpers and g_markup_collect_attributes in all builder subparsers. --- gtk/gtktreestore.c | 90 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 30 deletions(-) diff --git a/gtk/gtktreestore.c b/gtk/gtktreestore.c index db3a3fff9b..294c719845 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; -- cgit v1.2.1