X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=ab8eb1db085034d78ebc67f9d736a0359c44a8fa;hb=60b8f6615b70c2f828c66641e01585ac791d5dc8;hp=bbf9d46953890c447518bb760560a4a97c4d1ec3;hpb=14633f07b92d515ca0c4447506fa938b3568f013;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index bbf9d469..ab8eb1db 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -64,6 +64,7 @@ #include "ev-utils.h" #include "ev-history.h" #include "ev-image.h" +#include "ev-message-area.h" #ifdef WITH_GNOME_PRINT #include "ev-print-job.h" @@ -91,8 +92,6 @@ #include #include -#include "ev-message-area.h" - #if !GLIB_CHECK_VERSION (2, 13, 3) char *xdg_user_dir_lookup (char *type); #endif @@ -672,7 +671,8 @@ ev_window_error_message (GtkWindow *window, const gchar *msg, GError *error) GTK_STOCK_CLOSE, GTK_RESPONSE_CANCEL, NULL); - ev_message_area_set_secondary_text (EV_MESSAGE_AREA (area), error->message); + if (error) + ev_message_area_set_secondary_text (EV_MESSAGE_AREA (area), error->message); g_signal_connect (area, "response", G_CALLBACK (ev_window_error_message_response_cb), window); @@ -1825,12 +1825,15 @@ ev_window_get_recent_file_label (gint index, const gchar *filename) gint length; const gchar *p; const gchar *end; - + gboolean is_rtl; + + is_rtl = (gtk_widget_get_default_direction () == GTK_TEXT_DIR_RTL); + g_return_val_if_fail (filename != NULL, NULL); length = strlen (filename); str = g_string_sized_new (length + 10); - g_string_printf (str, "_%d. ", index); + g_string_printf (str, "%s_%d. ", is_rtl ? "\xE2\x80\x8F" : "", index); p = filename; end = filename + length; @@ -4969,16 +4972,23 @@ ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window) gtk_clipboard_set_text (clipboard, uri, -1); } + static void image_save_dialog_response_cb (GtkWidget *fc, gint response_id, EvWindow *ev_window) { - GnomeVFSURI *target_uri; - gchar *uri; - gchar *filename; - gboolean is_local; - GError *error = NULL; + GnomeVFSURI *target_uri; + gboolean is_local; + GError *error = NULL; + + gchar *uri; + gchar *uri_extension; + gchar **extensions; + gchar *filename; + gchar *file_format; + GdkPixbufFormat* format; + GtkFileFilter *filter; if (response_id != GTK_RESPONSE_OK) { gtk_widget_destroy (fc); @@ -4986,20 +4996,42 @@ image_save_dialog_response_cb (GtkWidget *fc, } uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (fc)); - target_uri = gnome_vfs_uri_new (uri); + filter = gtk_file_chooser_get_filter (GTK_FILE_CHOOSER (fc)); + format = g_object_get_data (G_OBJECT (filter), "pixbuf-format"); + + if (format == NULL) { + format = get_gdk_pixbuf_format_by_extension (uri); + } + + if (format == NULL) { + ev_window_error_message (GTK_WINDOW (ev_window), + _("Couldn't find appropriate format to save image"), + NULL); + g_free (uri); + gtk_widget_destroy (fc); + + return; + } + + extensions = gdk_pixbuf_format_get_extensions (format); + uri_extension = g_strconcat (uri, ".", extensions[0], NULL); + g_strfreev(extensions); + file_format = gdk_pixbuf_format_get_name (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,8 +5064,7 @@ image_save_dialog_response_cb (GtkWidget *fc, static void ev_view_popup_cmd_save_image_as (GtkAction *action, EvWindow *window) { - GtkWidget *fc; - GtkFileFilter *filter; + GtkWidget *fc; if (!window->priv->image) return; @@ -5049,12 +5080,9 @@ 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); - + + file_chooser_dialog_add_writable_pixbuf_formats (GTK_FILE_CHOOSER (fc)); + g_signal_connect (fc, "response", G_CALLBACK (image_save_dialog_response_cb), window);