summaryrefslogtreecommitdiff
path: root/gtk/gtkfilefilter.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2004-11-07 05:42:01 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2004-11-07 05:42:01 +0000
commit7a08ab25a676c665455d5f4c3a74872aa5be31d4 (patch)
tree31b085938a9e9bfb770f0320b1531ba9db490771 /gtk/gtkfilefilter.c
parent1be34ede800b10ce8187265e296862905e32dcff (diff)
downloadgtk+-7a08ab25a676c665455d5f4c3a74872aa5be31d4.tar.gz
New convenience function to add a filter for image files which can be
2004-11-07 Matthias Clasen <mclasen@redhat.com> * gtk/gtkfilefilter.h: * gtk/gtkfilefilter.c (gtk_file_filter_add_pixbuf_formats): New convenience function to add a filter for image files which can be loaded by GdkPixbuf. (#145388, Anders Carlsson) * tests/testfilechooser.c: Test the image filter.
Diffstat (limited to 'gtk/gtkfilefilter.c')
-rw-r--r--gtk/gtkfilefilter.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/gtk/gtkfilefilter.c b/gtk/gtkfilefilter.c
index 10549e2f90..b248c78cae 100644
--- a/gtk/gtkfilefilter.c
+++ b/gtk/gtkfilefilter.c
@@ -36,6 +36,7 @@ typedef struct _FilterRule FilterRule;
typedef enum {
FILTER_RULE_PATTERN,
FILTER_RULE_MIME_TYPE,
+ FILTER_RULE_PIXBUF_FORMATS,
FILTER_RULE_CUSTOM
} FilterRuleType;
@@ -62,6 +63,7 @@ struct _FilterRule
union {
gchar *pattern;
gchar *mime_type;
+ GSList *pixbuf_formats;
struct {
GtkFileFilterFunc func;
gpointer data;
@@ -127,6 +129,9 @@ filter_rule_free (FilterRule *rule)
if (rule->u.custom.notify)
rule->u.custom.notify (rule->u.custom.data);
break;
+ case FILTER_RULE_PIXBUF_FORMATS:
+ g_slist_free (rule->u.pixbuf_formats);
+ break;
default:
g_assert_not_reached ();
}
@@ -278,6 +283,30 @@ gtk_file_filter_add_pattern (GtkFileFilter *filter,
}
/**
+ * gtk_file_filter_add_pixbuf_formats:
+ * @filter: a #GtkFileFilter
+ *
+ * Adds a rule allowing image files in the formats supported
+ * by GdkPixbuf.
+ *
+ * Since: 2.6
+ **/
+void
+gtk_file_filter_add_pixbuf_formats (GtkFileFilter *filter)
+{
+ FilterRule *rule;
+
+ g_return_if_fail (GTK_IS_FILE_FILTER (filter));
+
+ rule = g_new (FilterRule, 1);
+ rule->type = FILTER_RULE_PIXBUF_FORMATS;
+ rule->needed = GTK_FILE_FILTER_MIME_TYPE;
+ rule->u.pixbuf_formats = gdk_pixbuf_get_formats ();
+ file_filter_add_rule (filter, rule);
+}
+
+
+/**
* gtk_file_filter_add_custom:
* @filter: a #GtkFileFilter
* @needed: bitfield of flags indicating the information that the custom
@@ -382,6 +411,30 @@ gtk_file_filter_filter (GtkFileFilter *filter,
_gtk_fnmatch (rule->u.pattern, filter_info->display_name, FALSE))
return TRUE;
break;
+ case FILTER_RULE_PIXBUF_FORMATS:
+ {
+ GSList *list;
+
+ for (list = rule->u.pixbuf_formats; list; list = list->next)
+ {
+ int i;
+ gchar **mime_types;
+
+ mime_types = gdk_pixbuf_format_get_mime_types (list->data);
+
+ for (i = 0; mime_types[i] != NULL; i++)
+ {
+ if (strcmp (mime_types[i], filter_info->mime_type) == 0)
+ {
+ g_strfreev (mime_types);
+ return TRUE;
+ }
+ }
+
+ g_strfreev (mime_types);
+ }
+ break;
+ }
case FILTER_RULE_CUSTOM:
if (rule->u.custom.func (filter_info, rule->u.custom.data))
return TRUE;