summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2011-01-27 17:10:17 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2011-01-27 17:10:17 +0900
commitb997768168b7d7a0f10dd1fce2070bb4c8110d4b (patch)
treefef953494c8d843f9a9067490d1ba82c4924ca8c
parent401771de795063ec14ee0321966afce9f82ea427 (diff)
downloadglade-b997768168b7d7a0f10dd1fce2070bb4c8110d4b.tar.gz
* plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added support for GtkRecentFilter
as well as reading and writing the new <mime-types> <patterns> and <applications> tags that are recently added to GtkRecentFilter's GtkBuildable implementation.
-rw-r--r--ChangeLog6
-rw-r--r--plugins/gtk+/glade-gtk.c207
-rw-r--r--plugins/gtk+/gtk+.xml.in35
3 files changed, 244 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 9dd812ac..b51d687c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2011-01-27 Tristan Van Berkom <tristanvb@openismus.com>
+
+ * plugins/gtk+/gtk+.xml.in, plugins/gtk+/glade-gtk.c: Added support for GtkRecentFilter
+ as well as reading and writing the new <mime-types> <patterns> and <applications> tags
+ that are recently added to GtkRecentFilter's GtkBuildable implementation.
+
2011-01-26 Tristan Van Berkom <tristanvb@openismus.com>
* plugins/gtk+/Makefile.am, plugins/gtk+/glade-string-list.[ch]: Added Boxed type
diff --git a/plugins/gtk+/glade-gtk.c b/plugins/gtk+/glade-gtk.c
index 128ddb2a..e363b061 100644
--- a/plugins/gtk+/glade-gtk.c
+++ b/plugins/gtk+/glade-gtk.c
@@ -8934,8 +8934,7 @@ glade_gtk_combo_box_text_write_widget (GladeWidgetAdaptor * adaptor,
return;
/* First chain up and read in all the normal properties.. */
- GWA_GET_CLASS (GTK_TYPE_WIDGET)->write_widget (adaptor, widget, context,
- node);
+ GWA_GET_CLASS (GTK_TYPE_COMBO_BOX)->write_widget (adaptor, widget, context, node);
attrs_node = glade_xml_node_new (context, GLADE_TAG_ITEMS);
@@ -11956,3 +11955,207 @@ glade_gtk_text_tag_table_action_activate (GladeWidgetAdaptor *adaptor,
glade_gtk_text_tag_table_launch_editor (object);
}
}
+
+
+/*--------------------------- GtkRecentFilter ---------------------------------*/
+#define GLADE_TAG_PATTERNS "patterns"
+#define GLADE_TAG_PATTERN "pattern"
+#define GLADE_TAG_MIME_TYPES "mime-types"
+#define GLADE_TAG_MIME_TYPE "mime-type"
+#define GLADE_TAG_APPLICATIONS "applications"
+#define GLADE_TAG_APPLICATION "applciation"
+
+typedef enum {
+ FILTER_PATTERN,
+ FILTER_MIME,
+ FILTER_APPLICATION
+} FilterType;
+
+GladeEditorProperty *
+glade_gtk_recent_filter_create_eprop (GladeWidgetAdaptor * adaptor,
+ GladePropertyClass * klass,
+ gboolean use_command)
+{
+ GladeEditorProperty *eprop;
+ GParamSpec *pspec;
+
+ pspec = glade_property_class_get_pspec (klass);
+
+ if (pspec->value_type == GLADE_TYPE_STRING_LIST)
+ {
+ eprop = glade_eprop_string_list_new (klass, use_command, FALSE);
+ }
+ else
+ eprop = GWA_GET_CLASS
+ (G_TYPE_OBJECT)->create_eprop (adaptor, klass, use_command);
+
+ return eprop;
+}
+
+gchar *
+glade_gtk_recent_filter_string_from_value (GladeWidgetAdaptor * adaptor,
+ GladePropertyClass * klass,
+ const GValue * value)
+{
+ GParamSpec *pspec;
+
+ pspec = glade_property_class_get_pspec (klass);
+
+ if (pspec->value_type == GLADE_TYPE_STRING_LIST)
+ {
+ GList *list = g_value_get_boxed (value);
+
+ return glade_string_list_to_string (list);
+ }
+ else
+ return GWA_GET_CLASS
+ (G_TYPE_OBJECT)->string_from_value (adaptor, klass, value);
+}
+
+static void
+glade_gtk_filter_read_strings (GladeWidget *widget,
+ GladeXmlNode *node,
+ FilterType type,
+ const gchar *property_name)
+{
+ GladeXmlNode *items_node;
+ GladeXmlNode *item_node;
+ GList *string_list = NULL;
+ const gchar *string_group_tag;
+ const gchar *string_tag;
+
+ switch (type)
+ {
+ case FILTER_PATTERN:
+ string_group_tag = GLADE_TAG_PATTERNS;
+ string_tag = GLADE_TAG_PATTERN;
+ break;
+ case FILTER_MIME:
+ string_group_tag = GLADE_TAG_MIME_TYPES;
+ string_tag = GLADE_TAG_MIME_TYPE;
+ break;
+ case FILTER_APPLICATION:
+ string_group_tag = GLADE_TAG_APPLICATIONS;
+ string_tag = GLADE_TAG_APPLICATION;
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if ((items_node =
+ glade_xml_search_child (node, string_group_tag)) != NULL)
+ {
+
+ for (item_node = glade_xml_node_get_children (items_node);
+ item_node; item_node = glade_xml_node_next (item_node))
+ {
+ gchar *str;
+
+ if (!glade_xml_node_verify (item_node, string_tag))
+ continue;
+
+ if ((str = glade_xml_get_content (item_node)) == NULL)
+ continue;
+
+ string_list = glade_string_list_append (string_list, str, NULL, NULL, FALSE);
+ g_free (str);
+ }
+
+ glade_widget_property_set (widget, property_name, string_list);
+ glade_string_list_free (string_list);
+ }
+}
+
+static void
+glade_gtk_filter_write_strings (GladeWidget *widget,
+ GladeXmlContext *context,
+ GladeXmlNode *node,
+ FilterType type,
+ const gchar *property_name)
+{
+ GladeXmlNode *item_node;
+ GList *string_list = NULL, *l;
+ GladeString *string;
+ const gchar *string_tag;
+
+ switch (type)
+ {
+ case FILTER_PATTERN: string_tag = GLADE_TAG_PATTERN; break;
+ case FILTER_MIME: string_tag = GLADE_TAG_MIME_TYPE; break;
+ case FILTER_APPLICATION: string_tag = GLADE_TAG_APPLICATION; break;
+ default:
+ g_assert_not_reached ();
+ break;
+ }
+
+ if (!glade_widget_property_get (widget, property_name, &string_list) || !string_list)
+ return;
+
+ for (l = string_list; l; l = l->next)
+ {
+ string = l->data;
+
+ item_node = glade_xml_node_new (context, string_tag);
+ glade_xml_node_append_child (node, item_node);
+
+ glade_xml_set_content (item_node, string->string);
+ }
+}
+
+void
+glade_gtk_recent_filter_read_widget (GladeWidgetAdaptor *adaptor,
+ GladeWidget *widget,
+ GladeXmlNode *node)
+{
+ if (!glade_xml_node_verify (node, GLADE_XML_TAG_WIDGET))
+ return;
+
+ /* First chain up and read in all the normal properties.. */
+ GWA_GET_CLASS (G_TYPE_OBJECT)->read_widget (adaptor, widget, node);
+
+ glade_gtk_filter_read_strings (widget, node, FILTER_MIME, "glade-mime-types");
+ glade_gtk_filter_read_strings (widget, node, FILTER_PATTERN, "glade-patterns");
+ glade_gtk_filter_read_strings (widget, node, FILTER_APPLICATION, "glade-applications");
+}
+
+void
+glade_gtk_recent_filter_write_widget (GladeWidgetAdaptor *adaptor,
+ GladeWidget *widget,
+ GladeXmlContext *context,
+ GladeXmlNode *node)
+{
+ GladeXmlNode *strings_node;
+
+ if (!glade_xml_node_verify (node, GLADE_XML_TAG_WIDGET))
+ return;
+
+ /* First chain up and read in all the normal properties.. */
+ GWA_GET_CLASS (G_TYPE_OBJECT)->write_widget (adaptor, widget, context, node);
+
+ strings_node = glade_xml_node_new (context, GLADE_TAG_MIME_TYPES);
+ glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_MIME, "glade-mime-types");
+
+ if (!glade_xml_node_get_children (strings_node))
+ glade_xml_node_delete (strings_node);
+ else
+ glade_xml_node_append_child (node, strings_node);
+
+
+ strings_node = glade_xml_node_new (context, GLADE_TAG_PATTERNS);
+ glade_gtk_filter_write_strings (widget, context, strings_node, FILTER_PATTERN, "glade-patterns");
+
+ if (!glade_xml_node_get_children (strings_node))
+ glade_xml_node_delete (strings_node);
+ else
+ glade_xml_node_append_child (node, strings_node);
+
+ strings_node = glade_xml_node_new (context, GLADE_TAG_APPLICATIONS);
+ glade_gtk_filter_write_strings (widget, context, strings_node,
+ FILTER_APPLICATION, "glade-applications");
+
+ if (!glade_xml_node_get_children (strings_node))
+ glade_xml_node_delete (strings_node);
+ else
+ glade_xml_node_append_child (node, strings_node);
+}
diff --git a/plugins/gtk+/gtk+.xml.in b/plugins/gtk+/gtk+.xml.in
index f30ebb44..67cdf854 100644
--- a/plugins/gtk+/gtk+.xml.in
+++ b/plugins/gtk+/gtk+.xml.in
@@ -1221,7 +1221,7 @@ embedded in another object</_tooltip>
<type>GParamBoxed</type>
<value-type>GladeStringList</value-type>
</parameter-spec>
- <_tooltip>The items to show in the combo box</_tooltip>
+ <_tooltip>The list of items to show in the combo box</_tooltip>
</property>
</properties>
</glade-widget-class>
@@ -1846,7 +1846,6 @@ embedded in another object</_tooltip>
<glade-widget-class name="GtkRecentChooserDialog" generic-name="recentchooserdialog" _title="Recent Chooser Dialog"/>
- <!-- Objects -->
<glade-widget-class name="GtkSizeGroup" generic-name="sizegroup" _title="Size Group" toplevel="True">
<depends-function>glade_gtk_size_group_depends</depends-function>
<read-widget-function>glade_gtk_size_group_read_widget</read-widget-function>
@@ -3369,6 +3368,37 @@ embedded in another object</_tooltip>
<glade-widget-class name="GtkFileFilter" generic-name="filefilter" _title="File Filter"
toplevel="True"/>
+
+ <glade-widget-class name="GtkRecentFilter" generic-name="recentfilter" _title="Recent Filter"
+ toplevel="True">
+ <create-editor-property-function>glade_gtk_recent_filter_create_eprop</create-editor-property-function>
+ <string-from-value-function>glade_gtk_recent_filter_string_from_value</string-from-value-function>
+ <read-widget-function>glade_gtk_recent_filter_read_widget</read-widget-function>
+ <write-widget-function>glade_gtk_recent_filter_write_widget</write-widget-function>
+ <properties>
+ <property id="glade-mime-types" _name="Mime Types" save="False" ignore="True" since="3.0">
+ <parameter-spec>
+ <type>GParamBoxed</type>
+ <value-type>GladeStringList</value-type>
+ </parameter-spec>
+ <_tooltip>The list of mime types to add to the filter</_tooltip>
+ </property>
+ <property id="glade-patterns" _name="Patterns" save="False" ignore="True" since="3.0">
+ <parameter-spec>
+ <type>GParamBoxed</type>
+ <value-type>GladeStringList</value-type>
+ </parameter-spec>
+ <_tooltip>The list of file name patterns to add to the filter</_tooltip>
+ </property>
+ <property id="glade-applications" _name="Applications" save="False" ignore="True" since="3.0">
+ <parameter-spec>
+ <type>GParamBoxed</type>
+ <value-type>GladeStringList</value-type>
+ </parameter-spec>
+ <_tooltip>The list of application names to add to the filter</_tooltip>
+ </property>
+ </properties>
+ </glade-widget-class>
</glade-widget-classes>
@@ -3507,6 +3537,7 @@ embedded in another object</_tooltip>
<glade-widget-class-ref name="GtkIconFactory"/>
<glade-widget-class-ref name="GtkStatusIcon"/>
<glade-widget-class-ref name="GtkFileFilter"/>
+ <glade-widget-class-ref name="GtkRecentFilter"/>
</glade-widget-group>
</glade-catalog>