From 898751aeeba3d7baa97ad679928e65830e7f7843 Mon Sep 17 00:00:00 2001 From: Nickolay V. Shmyrev Date: Tue, 15 Jan 2008 00:58:18 +0000 Subject: Simplify image format selection on save. 2008-01-15 Nickolay V. Shmyrev * 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 --- (limited to 'shell/ev-utils.c') 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 #include +#include #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; +} + -- cgit v0.9.1