From ec8b42c7daf3f2727a6d2d517922dfa699b35bbc Mon Sep 17 00:00:00 2001 From: Carl-Anton Ingmarsson Date: Sun, 30 Dec 2007 16:27:31 +0000 Subject: Allow exporting images in any format supported by GdkPixbuf. Fixes bug 2007-12-30 Carl-Anton Ingmarsson * 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.[ch]: * shell/Makefile.am: * shell/ev-window.c: (image_save_dialog_response_cb), (ev_view_popup_cmd_save_image_as): Allow exporting images in any format supported by GdkPixbuf. Fixes bug #500209. svn path=/trunk/; revision=2791 --- (limited to 'shell') diff --git a/shell/Makefile.am b/shell/Makefile.am index a4e8d1e..8a510b4 100644 --- a/shell/Makefile.am +++ b/shell/Makefile.am @@ -5,6 +5,7 @@ INCLUDES= \ -I$(top_srcdir)/cut-n-paste/toolbar-editor/ \ -I$(top_srcdir)/cut-n-paste/totem-screensaver/ \ -I$(top_srcdir)/cut-n-paste/gedit-message-area/ \ + -I$(top_srcdir)/cut-n-paste/fileformatchooser/ \ -I$(top_srcdir)/libdocument \ -I$(top_srcdir)/properties \ -DGNOMELOCALEDIR=\"$(datadir)/locale\" \ @@ -97,6 +98,7 @@ evince_LDADD= \ $(top_builddir)/cut-n-paste/toolbar-editor/libtoolbareditor.la \ $(top_builddir)/cut-n-paste/totem-screensaver/libtotemscrsaver.la \ $(top_builddir)/cut-n-paste/gedit-message-area/libgeditmsgarea.la \ + $(top_builddir)/cut-n-paste/fileformatchooser/libfileformatchooser.la \ $(top_builddir)/properties/libevproperties.la \ $(top_builddir)/libdocument/libevbackend.la \ $(SHELL_LIBS) \ diff --git a/shell/ev-window.c b/shell/ev-window.c index bbf9d46..a9d7bdc 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -93,6 +93,8 @@ #include "ev-message-area.h" +#include "eggfileformatchooser.h" + #if !GLIB_CHECK_VERSION (2, 13, 3) char *xdg_user_dir_lookup (char *type); #endif @@ -4974,32 +4976,43 @@ image_save_dialog_response_cb (GtkWidget *fc, gint response_id, EvWindow *ev_window) { + GtkWidget *format_chooser; GnomeVFSURI *target_uri; gchar *uri; + gchar *uri_extension; gchar *filename; + gchar *file_format; gboolean is_local; GError *error = NULL; + guint format; if (response_id != GTK_RESPONSE_OK) { gtk_widget_destroy (fc); return; } + format_chooser = gtk_file_chooser_get_extra_widget (GTK_FILE_CHOOSER (fc)); + uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc)); - target_uri = gnome_vfs_uri_new (uri); + format = egg_file_format_chooser_get_format (EGG_FILE_FORMAT_CHOOSER (format_chooser), uri); + uri_extension = egg_file_format_chooser_append_extension (EGG_FILE_FORMAT_CHOOSER (format_chooser), + uri, format); + file_format = (char *)egg_file_format_chooser_get_format_data (EGG_FILE_FORMAT_CHOOSER (format_chooser), + format); + target_uri = gnome_vfs_uri_new (uri_extension); is_local = gnome_vfs_uri_is_local (target_uri); if (is_local) { - filename = g_filename_from_uri (uri, NULL, NULL); + filename = g_filename_from_uri (uri_extension, NULL, NULL); } else { filename = ev_tmp_filename ("saveimage"); } g_free (uri); + g_free (uri_extension); - /* FIXME: allow saving in other image formats than png */ gdk_pixbuf_save (ev_image_get_pixbuf (ev_window->priv->image), - filename, "png", &error, NULL); + filename, file_format, &error, NULL); if (error) { ev_window_error_message (GTK_WINDOW (ev_window), @@ -5032,7 +5045,7 @@ image_save_dialog_response_cb (GtkWidget *fc, static void ev_view_popup_cmd_save_image_as (GtkAction *action, EvWindow *window) { - GtkWidget *fc; + GtkWidget *fc, *format_chooser; GtkFileFilter *filter; if (!window->priv->image) @@ -5049,11 +5062,12 @@ ev_view_popup_cmd_save_image_as (GtkAction *action, EvWindow *window) gtk_dialog_set_default_response (GTK_DIALOG (fc), GTK_RESPONSE_OK); gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (fc), FALSE); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (fc), TRUE); - - 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 (fc), filter); + + format_chooser = egg_file_format_chooser_new (); + egg_file_format_chooser_add_pixbuf_formats (EGG_FILE_FORMAT_CHOOSER (format_chooser), + 0, NULL); + + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (fc), format_chooser); g_signal_connect (fc, "response", G_CALLBACK (image_save_dialog_response_cb), -- cgit v0.9.1