From cfecb6bf10ca661301e19aac34047241d735ddce Mon Sep 17 00:00:00 2001 From: Tristan Van Berkom Date: Sun, 9 Jan 2011 14:06:19 +0900 Subject: [PATCH] Added GtkBuildable support to add "tag" children to GtkTextTagTable. --- gtk/gtktexttagtable.c | 47 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/gtk/gtktexttagtable.c b/gtk/gtktexttagtable.c index b1a99ffd12..ea68ad9ba2 100644 --- a/gtk/gtktexttagtable.c +++ b/gtk/gtktexttagtable.c @@ -28,6 +28,7 @@ #include "gtktexttagtable.h" +#include "gtkbuildable.h" #include "gtktexttagprivate.h" #include "gtkmarshalers.h" #include "gtktextbuffer.h" /* just for the lame notify_will_remove_tag hack */ @@ -44,9 +45,26 @@ * You may wish to begin by reading the text widget * conceptual overview which gives an overview of all the objects and data * types related to the text widget and how they work together. + * + * + * GtkTextTagTables as GtkBuildable + * + * The GtkTextTagTable implementation of the GtkBuildable interface + * supports adding tags by specifying "tag" as the "type" + * attribute of a <child> element. + * + * + * A UI definition fragment specifying tags + * + * + * + * + * + * ]]> + * */ - struct _GtkTextTagTablePrivate { GHashTable *hash; @@ -78,9 +96,17 @@ static void gtk_text_tag_table_get_property (GObject *object, GValue *value, GParamSpec *pspec); +static void gtk_text_tag_table_buildable_interface_init (GtkBuildableIface *iface); +static void gtk_text_tag_table_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type); + static guint signals[LAST_SIGNAL] = { 0 }; -G_DEFINE_TYPE (GtkTextTagTable, gtk_text_tag_table, G_TYPE_OBJECT) +G_DEFINE_TYPE_WITH_CODE (GtkTextTagTable, gtk_text_tag_table, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, + gtk_text_tag_table_buildable_interface_init)) static void gtk_text_tag_table_class_init (GtkTextTagTableClass *klass) @@ -246,6 +272,23 @@ gtk_text_tag_table_get_property (GObject *object, } } +static void +gtk_text_tag_table_buildable_interface_init (GtkBuildableIface *iface) +{ + iface->add_child = gtk_text_tag_table_buildable_add_child; +} + +static void +gtk_text_tag_table_buildable_add_child (GtkBuildable *buildable, + GtkBuilder *builder, + GObject *child, + const gchar *type) +{ + if (type && strcmp (type, "tag") == 0) + gtk_text_tag_table_add (GTK_TEXT_TAG_TABLE (buildable), + GTK_TEXT_TAG (child)); +} + /** * gtk_text_tag_table_add: * @table: a #GtkTextTagTable