diff options
author | Nickolay V. Shmyrev <nshmyrev@yandex.ru> | 2008-01-15 00:58:18 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2008-01-15 00:58:18 (GMT) |
commit | 898751aeeba3d7baa97ad679928e65830e7f7843 (patch) | |
tree | 436f1e8226c3be4c8ace6c5ed45001e613c76a8b /shell/ev-utils.c | |
parent | b5ae55d36d4e39b8fcd248d66ad077111d74e9b5 (diff) |
Simplify image format selection on save.
2008-01-15 Nickolay V. Shmyrev <nshmyrev@yandex.ru>
* configure.ac:
* cut-n-paste/Makefile.am:
* cut-n-paste/fileformatchooser/Makefile.am:
* cut-n-paste/fileformatchooser/egg-macros.h:
* cut-n-paste/fileformatchooser/eggfileformatchooser.c:
* cut-n-paste/fileformatchooser/eggfileformatchooser.h:
* shell/Makefile.am:
* shell/ev-utils.c:
(file_chooser_dialog_add_writable_pixbuf_formats),
(get_gdk_pixbuf_format_by_extension):
* shell/ev-utils.h:
* shell/ev-window.c: (ev_window_error_message),
(image_save_dialog_response_cb), (ev_view_popup_cmd_save_image_as):
Simplify image format selection on save.
svn path=/trunk/; revision=2827
Diffstat (limited to 'shell/ev-utils.c')
-rw-r--r-- | shell/ev-utils.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/shell/ev-utils.c b/shell/ev-utils.c index 3e5c203..42d81f9 100644 --- a/shell/ev-utils.c +++ b/shell/ev-utils.c @@ -25,6 +25,7 @@ #include <string.h> #include <math.h> +#include <glib/gi18n.h> #define PRINT_CONFIG_FILENAME "ev-print-config.xml" @@ -410,3 +411,86 @@ get_screen_dpi (GtkWindow *window) return (xdpi + ydpi) / 2.0; } + +void +file_chooser_dialog_add_writable_pixbuf_formats (GtkFileChooser *chooser) +{ + GSList *pixbuf_formats = NULL; + GSList *iter; + GtkFileFilter *filter; + int i; + + filter = gtk_file_filter_new(); + gtk_file_filter_set_name (filter, _("By extension")); + g_object_set_data (G_OBJECT(filter), "pixbuf-format", NULL); + gtk_file_chooser_add_filter (chooser, filter); + + pixbuf_formats = gdk_pixbuf_get_formats (); + + for (iter = pixbuf_formats; iter; iter = iter->next) { + GdkPixbufFormat *format = iter->data; + + gchar *description, *name, *extensions; + gchar **extension_list, **mime_types; + + if (gdk_pixbuf_format_is_disabled (format) || + !gdk_pixbuf_format_is_writable (format)) + continue; + + name = gdk_pixbuf_format_get_description (format); + extension_list = gdk_pixbuf_format_get_extensions (format); + extensions = g_strjoinv (", ", extension_list); + g_strfreev (extension_list); + description = g_strdup_printf ("%s (%s)", name, extensions); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, description); + g_object_set_data (G_OBJECT (filter), "pixbuf-format", format); + gtk_file_chooser_add_filter (chooser, filter); + + g_free (description); + g_free (extensions); + g_free (name); + + mime_types = gdk_pixbuf_format_get_mime_types (format); + for (i = 0; mime_types[i] != 0; i++) + gtk_file_filter_add_mime_type (filter, mime_types[i]); + g_strfreev (mime_types); + } + + g_slist_free (pixbuf_formats); +} + +GdkPixbufFormat* +get_gdk_pixbuf_format_by_extension (gchar *uri) +{ + GSList *pixbuf_formats = NULL; + GSList *iter; + int i; + + pixbuf_formats = gdk_pixbuf_get_formats (); + + for (iter = pixbuf_formats; iter; iter = iter->next) { + gchar **extension_list; + GdkPixbufFormat *format = iter->data; + + if (gdk_pixbuf_format_is_disabled (format) || + !gdk_pixbuf_format_is_writable (format)) + continue; + + extension_list = gdk_pixbuf_format_get_extensions (format); + + for (i = 0; extension_list[i] != 0; i++) { + if (g_str_has_suffix (uri, extension_list[i])) { + g_slist_free (pixbuf_formats); + g_strfreev (extension_list); + return format; + } + } + g_strfreev (extension_list); + } + + g_slist_free (pixbuf_formats); + return NULL; +} + |