summaryrefslogtreecommitdiff
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
parent1be34ede800b10ce8187265e296862905e32dcff (diff)
downloadgdk-pixbuf-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.
-rw-r--r--ChangeLog7
-rw-r--r--ChangeLog.pre-2-107
-rw-r--r--ChangeLog.pre-2-67
-rw-r--r--ChangeLog.pre-2-87
-rw-r--r--docs/reference/ChangeLog4
-rw-r--r--docs/reference/gtk/gtk-sections.txt1
-rw-r--r--gtk/gtkfilefilter.c53
-rw-r--r--gtk/gtkfilefilter.h19
-rw-r--r--tests/testfilechooser.c21
9 files changed, 116 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 0b3868756..193db9100 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
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.
+
* gtk/gtkmenu.c (menu_change_screen): Remove some warnings.
Show files in folder modes. (#157013, Nickolay V. Shmyrev)
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 0b3868756..193db9100 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,5 +1,12 @@
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.
+
* gtk/gtkmenu.c (menu_change_screen): Remove some warnings.
Show files in folder modes. (#157013, Nickolay V. Shmyrev)
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 0b3868756..193db9100 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,5 +1,12 @@
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.
+
* gtk/gtkmenu.c (menu_change_screen): Remove some warnings.
Show files in folder modes. (#157013, Nickolay V. Shmyrev)
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 0b3868756..193db9100 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,5 +1,12 @@
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.
+
* gtk/gtkmenu.c (menu_change_screen): Remove some warnings.
Show files in folder modes. (#157013, Nickolay V. Shmyrev)
diff --git a/docs/reference/ChangeLog b/docs/reference/ChangeLog
index 9c573ffea..e3458eaae 100644
--- a/docs/reference/ChangeLog
+++ b/docs/reference/ChangeLog
@@ -1,3 +1,7 @@
+2004-11-07 Matthias Clasen <mclasen@redhat.com>
+
+ * gtk/gtk-sections.txt: Add gtk_file_filter_add_pixbuf_formats.
+
2004-11-04 Matthias Clasen <mclasen@redhat.com>
* gtk/tmpl/gtkaboutdialog.sgml:
diff --git a/docs/reference/gtk/gtk-sections.txt b/docs/reference/gtk/gtk-sections.txt
index 7b6cebc5d..27dfa12c6 100644
--- a/docs/reference/gtk/gtk-sections.txt
+++ b/docs/reference/gtk/gtk-sections.txt
@@ -1311,6 +1311,7 @@ gtk_file_filter_set_name
gtk_file_filter_get_name
gtk_file_filter_add_mime_type
gtk_file_filter_add_pattern
+gtk_file_filter_add_pixbuf_formats
gtk_file_filter_add_custom
gtk_file_filter_get_needed
gtk_file_filter_filter
diff --git a/gtk/gtkfilefilter.c b/gtk/gtkfilefilter.c
index 10549e2f9..b248c78ca 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;
diff --git a/gtk/gtkfilefilter.h b/gtk/gtkfilefilter.h
index 01b70b3ba..a4b909b0a 100644
--- a/gtk/gtkfilefilter.h
+++ b/gtk/gtkfilefilter.h
@@ -59,15 +59,16 @@ void gtk_file_filter_set_name (GtkFileFilter *filter,
const gchar *name);
G_CONST_RETURN gchar *gtk_file_filter_get_name (GtkFileFilter *filter);
-void gtk_file_filter_add_mime_type (GtkFileFilter *filter,
- const gchar *mime_type);
-void gtk_file_filter_add_pattern (GtkFileFilter *filter,
- const gchar *pattern);
-void gtk_file_filter_add_custom (GtkFileFilter *filter,
- GtkFileFilterFlags needed,
- GtkFileFilterFunc func,
- gpointer data,
- GDestroyNotify notify);
+void gtk_file_filter_add_mime_type (GtkFileFilter *filter,
+ const gchar *mime_type);
+void gtk_file_filter_add_pattern (GtkFileFilter *filter,
+ const gchar *pattern);
+void gtk_file_filter_add_pixbuf_formats (GtkFileFilter *filter);
+void gtk_file_filter_add_custom (GtkFileFilter *filter,
+ GtkFileFilterFlags needed,
+ GtkFileFilterFunc func,
+ gpointer data,
+ GDestroyNotify notify);
GtkFileFilterFlags gtk_file_filter_get_needed (GtkFileFilter *filter);
gboolean gtk_file_filter_filter (GtkFileFilter *filter,
diff --git a/tests/testfilechooser.c b/tests/testfilechooser.c
index b6df9aced..7910c61a8 100644
--- a/tests/testfilechooser.c
+++ b/tests/testfilechooser.c
@@ -95,6 +95,13 @@ no_backup_files_filter (const GtkFileFilterInfo *filter_info,
return 1;
}
+static void
+filter_changed (GtkFileChooserDialog *dialog,
+ gpointer data)
+{
+ g_print ("file filter changed\n");
+}
+
static char *
format_time (time_t t)
{
@@ -403,6 +410,10 @@ main (int argc, char **argv)
gtk_init (&argc, &argv);
+ /* to test rtl layout, set RTL=1 in the environment */
+ if (g_getenv ("RTL"))
+ gtk_widget_set_default_direction (GTK_TEXT_DIR_RTL);
+
action = GTK_FILE_CHOOSER_ACTION_OPEN;
/* lame-o arg parsing */
@@ -466,6 +477,9 @@ main (int argc, char **argv)
gtk_file_filter_add_mime_type (filter, "image/png");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+ g_signal_connect (dialog, "notify::filter",
+ G_CALLBACK (filter_changed), NULL);
+
/* Make this filter the default */
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (dialog), filter);
@@ -475,11 +489,16 @@ main (int argc, char **argv)
gtk_file_filter_add_mime_type (filter, "image/png");
gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+ filter = gtk_file_filter_new ();
+ gtk_file_filter_set_name (filter, "Images");
+ gtk_file_filter_add_pixbuf_formats (filter);
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+
/* Preview widget */
/* THIS IS A TERRIBLE PREVIEW WIDGET, AND SHOULD NOT BE COPIED AT ALL.
*/
preview_vbox = gtk_vbox_new (0, FALSE);
- /* gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (dialog), preview_vbox);*/
+ /*gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (dialog), preview_vbox);*/
preview_label = gtk_label_new (NULL);
gtk_box_pack_start (GTK_BOX (preview_vbox), preview_label, TRUE, TRUE, 0);