X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-window.c;h=dd05d662d2b88ab2f871f6d8cd9c48594e8f028f;hb=acd335e3f233518d347ac8587a5f37e6ce614f25;hp=81c5b9ee76af13420027dbf7929c206136ce9daf;hpb=b8aebf2e1ba5b4f9ff1e1256b28acb3e23947c51;p=evince.git diff --git a/shell/ev-window.c b/shell/ev-window.c index 81c5b9ee..dd05d662 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 @@ -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); }