X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=f6a525426730edf3bc855305525d18c2302511a4;hb=0d0c2500e6383c5e7821d6fb10ea1fb0307a36b6;hp=81c5b9ee76af13420027dbf7929c206136ce9daf;hpb=b8aebf2e1ba5b4f9ff1e1256b28acb3e23947c51;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 81c5b9ee..f6a52542 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -66,6 +66,7 @@ #include "ev-history.h" #include "ev-image.h" #include "ev-message-area.h" +#include "ev-mount-operation.h" #include @@ -268,6 +269,8 @@ static void find_bar_search_changed_cb (EggFindBar *find_ GParamSpec *param, EvWindow *ev_window); static void ev_window_do_preview_print (EvWindow *window); +static void ev_window_load_file_remote (EvWindow *ev_window, + GFile *source_file); G_DEFINE_TYPE (EvWindow, ev_window, GTK_TYPE_WINDOW) @@ -1421,6 +1424,39 @@ ev_window_close_dialogs (EvWindow *ev_window) ev_window->priv->properties = NULL; } +static void +ev_window_load_remote_failed (EvWindow *ev_window, + GError *error) +{ + ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); + ev_window->priv->in_reload = FALSE; + ev_window_error_message (GTK_WINDOW (ev_window), + _("Unable to open document"), + error); + g_free (ev_window->priv->local_uri); + ev_window->priv->local_uri = NULL; +} + +static void +mount_volume_ready_cb (GFile *source, + GAsyncResult *async_result, + EvWindow *ev_window) +{ + GError *error = NULL; + + g_file_mount_enclosing_volume_finish (source, async_result, &error); + + if (error) { + ev_window_load_remote_failed (ev_window, error); + g_object_unref (source); + g_error_free (error); + } else { + /* Volume successfully mounted, + try opening the file again */ + ev_window_load_file_remote (ev_window, source); + } +} + static void window_open_file_copy_ready_cb (GFile *source, GAsyncResult *async_result, @@ -1438,19 +1474,21 @@ window_open_file_copy_ready_cb (GFile *source, if (error->domain == G_IO_ERROR && error->code == G_IO_ERROR_NOT_MOUNTED) { - /* TODO: try to mount */ + GMountOperation *operation; + + operation = ev_mount_operation_new (GTK_WINDOW (ev_window)); + g_file_mount_enclosing_volume (source, + G_MOUNT_MOUNT_NONE, + operation, NULL, + (GAsyncReadyCallback)mount_volume_ready_cb, + ev_window); + g_object_unref (operation); + } else { + ev_window_load_remote_failed (ev_window, error); + g_object_unref (source); } - - ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE); - ev_window->priv->in_reload = FALSE; - ev_window_error_message (GTK_WINDOW (ev_window), - _("Unable to open document"), - error); - g_free (ev_window->priv->local_uri); - ev_window->priv->local_uri = NULL; g_error_free (error); - g_object_unref (source); } static void @@ -1903,7 +1941,7 @@ window_save_file_copy_ready_cb (GFile *src, _("The file could not be saved as “%s”."), name); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - error->message); + "%s", error->message); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); @@ -2118,7 +2156,7 @@ ev_window_print_finished (GtkPrintJob *print_job, GTK_BUTTONS_OK, _("Failed to print document")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - error->message); + "%s", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -2190,7 +2228,7 @@ ev_window_print_send (EvWindow *window, GtkPrintJob *job; GError *error = NULL; - job = gtk_print_job_new ("evince-print", + job = gtk_print_job_new (gtk_window_get_title (GTK_WINDOW (window)), window->priv->printer, settings, window->priv->print_page_setup); @@ -2205,7 +2243,7 @@ ev_window_print_send (EvWindow *window, window, NULL); } else { ev_window_clear_print_job (window); - g_warning (error->message); + g_warning ("%s", error->message); g_error_free (error); } } @@ -2218,7 +2256,7 @@ ev_window_print_job_cb (EvJobPrint *job, EvWindow *window) { if (job->error) { - g_warning (job->error->message); + g_warning ("%s", job->error->message); ev_window_clear_print_job (window); return; } @@ -3212,7 +3250,7 @@ ev_window_cmd_help_contents (GtkAction *action, EvWindow *ev_window) screen = gtk_widget_get_screen (GTK_WIDGET (ev_window)); gdk_spawn_command_line_on_screen (screen, command, &error); if (error != NULL) { - g_warning (error->message); + g_warning ("%s", error->message); g_error_free (error); } g_free (command); @@ -3268,7 +3306,7 @@ ev_window_preview_print_finished (GtkPrintJob *print_job, GTK_BUTTONS_OK, _("Failed to print document")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), - error->message); + "%s", error->message); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -3292,7 +3330,7 @@ ev_window_do_preview_print (EvWindow *window) page_setup = gtk_page_setup_new (); - job = gtk_print_job_new ("evince-print", + job = gtk_print_job_new (gtk_window_get_title (GTK_WINDOW (window)), priv->printer, priv->print_settings, page_setup); @@ -3312,7 +3350,7 @@ ev_window_do_preview_print (EvWindow *window) (GtkPrintJobCompleteFunc)ev_window_preview_print_finished, window, NULL); } else { - g_warning (error->message); + g_warning ("%s", error->message); g_error_free (error); } @@ -3337,7 +3375,7 @@ ev_window_cmd_preview_print (GtkAction *action, EvWindow *window) &error); if (error) { - g_warning (error->message); + g_warning ("%s", error->message); g_error_free (error); print_settings = NULL; } @@ -4155,7 +4193,7 @@ static const GtkActionEntry entries[] = { { "FileOpen", GTK_STOCK_OPEN, N_("_Open..."), "O", N_("Open an existing document"), G_CALLBACK (ev_window_cmd_file_open) }, - { "FileOpenCopy", NULL, N_("Op_en a Copy"), NULL, + { "FileOpenCopy", NULL, N_("Op_en a Copy"), "N", N_("Open a copy of the current document in a new window"), G_CALLBACK (ev_window_cmd_file_open_copy) }, { "FileSaveAs", GTK_STOCK_SAVE_AS, N_("_Save a Copy..."), "S", @@ -4759,19 +4797,14 @@ ev_view_popup_cmd_open_link_new_window (GtkAction *action, EvWindow *window) static void ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window) { - GtkClipboard *clipboard; EvLinkAction *ev_action; - const gchar *uri; ev_action = ev_link_get_action (window->priv->link); if (!ev_action) return; - uri = ev_link_action_get_uri (ev_action); - - clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window), - GDK_SELECTION_CLIPBOARD); - gtk_clipboard_set_text (clipboard, uri, -1); + ev_view_copy_link_address (EV_VIEW (window->priv->view), + ev_action); }