diff options
author | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2005-06-10 14:49:25 (GMT) |
---|---|---|
committer | Nickolay V. Shmyrev <nshmyrev@src.gnome.org> | 2005-06-10 14:49:25 (GMT) |
commit | 270571fe9d9ab085696c5b2af5a484dfc272b7a0 (patch) | |
tree | eaf692d3cc9270c54228a9e473c948ee217b9c02 /shell/ev-window.c | |
parent | f79d6e977948ded983460e2756fe6fc628719305 (diff) |
Transfer remote documents to tmp directory to display them later
Diffstat (limited to 'shell/ev-window.c')
-rw-r--r-- | shell/ev-window.c | 57 |
1 files changed, 40 insertions, 17 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c index f3c7a46..28921f0 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -114,6 +114,7 @@ struct _EvWindowPrivate { /* Document */ char *uri; + char *local_uri; EvDocument *document; EvPageCache *page_cache; @@ -747,6 +748,22 @@ ev_window_clear_jobs (EvWindow *ev_window) } } +static void +ev_window_clear_local_uri (EvWindow *ev_window) +{ + char *filename; + + if (ev_window->priv->local_uri) { + filename = g_filename_from_uri (ev_window->priv->local_uri, NULL, NULL); + if (filename != NULL) { + unlink (filename); + g_free (filename); + } + g_free (ev_window->priv->local_uri); + ev_window->priv->local_uri = NULL; + } +} + /* This callback will executed when load job will be finished. * * Since the flow of the error dialog is very confusing, we assume that both @@ -788,7 +805,7 @@ ev_window_load_job_cb (EvJobLoad *job, ev_window->priv->document = g_object_ref (document); ev_window_setup_document (ev_window); - ev_window_add_recent (ev_window, job->uri); + ev_window_add_recent (ev_window, ev_window->priv->uri); ev_window_clear_jobs (ev_window); return; @@ -824,33 +841,37 @@ ev_window_xfer_job_cb (EvJobXfer *job, { EvWindow *ev_window = EV_WINDOW (data); - ev_statusbar_pop (EV_STATUSBAR (ev_window->priv->statusbar), - EV_CONTEXT_PROGRESS); - ev_statusbar_set_progress (EV_STATUSBAR (ev_window->priv->statusbar), - FALSE); if (job->error != NULL) { + ev_statusbar_pop (EV_STATUSBAR (ev_window->priv->statusbar), + EV_CONTEXT_PROGRESS); + ev_statusbar_set_progress (EV_STATUSBAR (ev_window->priv->statusbar), + FALSE); + unable_to_load (ev_window, job->error->message); ev_window_clear_jobs (ev_window); } else { + char *uri; + EvDocument *document = g_object_ref (EV_JOB (job)->document); - + + if (job->local_uri) { + ev_window->priv->local_uri = g_strdup (job->local_uri); + uri = ev_window->priv->local_uri; + } else { + ev_window->priv->local_uri = NULL; + uri = ev_window->priv->uri; + } + ev_window_clear_jobs (ev_window); - ev_window->priv->load_job = ev_job_load_new (document, ev_window->priv->uri); + ev_window->priv->load_job = ev_job_load_new (document, uri); g_signal_connect (ev_window->priv->load_job, "finished", G_CALLBACK (ev_window_load_job_cb), ev_window); ev_job_queue_add_job (ev_window->priv->load_job, EV_JOB_PRIORITY_HIGH); - - ev_statusbar_push (EV_STATUSBAR (ev_window->priv->statusbar), - EV_CONTEXT_PROGRESS, - _("Loading document. Please wait")); - ev_statusbar_set_progress (EV_STATUSBAR (ev_window->priv->statusbar), - TRUE); - } } @@ -864,6 +885,7 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri) ev_window->priv->uri = g_strdup (uri); ev_window_clear_jobs (ev_window); + ev_window_clear_local_uri (ev_window); ev_window->priv->xfer_job = ev_job_xfer_new (uri); g_signal_connect (ev_window->priv->xfer_job, @@ -938,9 +960,6 @@ ev_window_add_recent (EvWindow *window, const char *filename) { EggRecentItem *item; - if (strstr (filename, "file:///") == NULL) - return; - item = egg_recent_item_new_from_uri (filename); egg_recent_item_add_group (item, "Evince"); egg_recent_model_add_full (window->priv->recent_model, item); @@ -2370,6 +2389,10 @@ ev_window_dispose (GObject *object) if (priv->load_job || priv->xfer_job) { ev_window_clear_jobs (window); } + + if (priv->local_uri) { + ev_window_clear_local_uri (window); + } if (priv->password_document) { g_object_unref (priv->password_document); |