]> www.fi.muni.cz Git - evince.git/commitdiff
Fixes bug #344160: if the xfer job doesn't complete because a password is
authorNickolay V. Shmyrev <nshmyrev@src.gnome.org>
Fri, 9 Jun 2006 05:24:35 +0000 (05:24 +0000)
committerNickolay V. Shmyrev <nshmyrev@src.gnome.org>
Fri, 9 Jun 2006 05:24:35 +0000 (05:24 +0000)
* shell/ev-jobs.c: (ev_job_xfer_run):
* shell/ev-window.c: (password_dialog_response),
(ev_window_popup_password_dialog), (ev_window_xfer_job_cb),
(ev_window_dispose):
Fixes bug #344160: if the xfer job doesn't complete
because a password is required, reload the existing
instance instead of creating a new one.

ChangeLog
shell/ev-jobs.c
shell/ev-window.c

index ae27296738487108d4d18707c3fa4be7380dcba3..927bd0fa45ea13158d98cf023d533492fedf9285 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2006-06-09  Pat Rondon  <pmr@patrondon.org>
+
+       * shell/ev-jobs.c: (ev_job_xfer_run):
+       * shell/ev-window.c: (password_dialog_response),
+       (ev_window_popup_password_dialog), (ev_window_xfer_job_cb),
+       (ev_window_dispose):
+       Fixes bug #344160: if the xfer job doesn't complete
+       because a password is required, reload the existing
+       instance instead of creating a new one.
+
 2006-06-01  Nickolay V. Shmyrev  <<nshmyrev@yandex.ru>>
 
        * shell/main.c: (main): Call gdk_threads_init. Thus
index e9f29eb681949ede515e4cf9688bfd1a64d80716..c88c0119f8c84dad4761f948457efa4dafb99d90 100644 (file)
@@ -434,6 +434,17 @@ ev_job_xfer_run (EvJobXfer *job)
                g_error_free (job->error);
                job->error = NULL;
        }
+       
+       /* This job may already have a document even if the job didn't complete
+          because, e.g., a password is required - if so, just reload rather than
+          creating a new instance */
+       if (EV_JOB (job)->document) {
+               ev_document_load (EV_JOB (job)->document,
+                                 job->local_uri ? job->local_uri : job->uri,
+                                 &job->error);
+               EV_JOB (job)->finished = TRUE;
+               return;
+       }
 
        source_uri = gnome_vfs_uri_new (job->uri);
        if (!gnome_vfs_uri_is_local (source_uri) && !job->local_uri) {
index e4b0ca0ca96cacc2876e8539d3c934298e715767..b285ca0c3e8c7cb94fcb1bb42f515365c641f933 100644 (file)
@@ -145,7 +145,7 @@ struct _EvWindowPrivate {
        EvLinkDest *dest;
        
        EvDocument *document;
-       EvDocument *password_document;
+
        EvPageCache *page_cache;
        EvWindowPageMode page_mode;
        EvWindowTitle *title;
@@ -803,7 +803,7 @@ password_dialog_response (GtkWidget *password_dialog,
                password = ev_password_dialog_get_password (EV_PASSWORD_DIALOG (password_dialog));
                if (password) {
                        ev_document_doc_mutex_lock ();
-                       ev_document_security_set_password (EV_DOCUMENT_SECURITY (ev_window->priv->password_document),
+                       ev_document_security_set_password (EV_DOCUMENT_SECURITY (ev_window->priv->xfer_job->document),
                                                           password);
                        ev_document_doc_mutex_unlock ();
                }
@@ -811,9 +811,6 @@ password_dialog_response (GtkWidget *password_dialog,
 
                ev_password_dialog_save_password (EV_PASSWORD_DIALOG (password_dialog));
 
-               g_object_unref (ev_window->priv->password_document);
-               ev_window->priv->password_document = NULL;
-
                ev_window_title_set_type (ev_window->priv->title, EV_WINDOW_TITLE_DOCUMENT);
                ev_job_queue_add_job (ev_window->priv->xfer_job, EV_JOB_PRIORITY_HIGH);
                
@@ -833,7 +830,7 @@ password_dialog_response (GtkWidget *password_dialog,
 static void
 ev_window_popup_password_dialog (EvWindow *ev_window)
 {
-       g_assert (ev_window->priv->password_document);
+       g_assert (ev_window->priv->xfer_job);
 
        gtk_widget_set_sensitive (ev_window->priv->password_view, FALSE);
 
@@ -906,11 +903,6 @@ ev_window_xfer_job_cb  (EvJobXfer *job,
        
        ev_view_set_loading (EV_VIEW (ev_window->priv->view), FALSE);
 
-       if (ev_window->priv->password_document) {
-               g_object_unref (ev_window->priv->password_document);
-               ev_window->priv->password_document = NULL;
-       }
-
        /* Success! */
        if (job->error == NULL) {
 
@@ -946,7 +938,6 @@ ev_window_xfer_job_cb  (EvJobXfer *job,
                ev_window->priv->uri = g_strdup (job->uri);
                setup_view_from_metadata (ev_window);
 
-               ev_window->priv->password_document = g_object_ref (document);
 
                file_name = gnome_vfs_format_uri_for_display (job->uri);
                base_name = g_path_get_basename (file_name);
@@ -2724,11 +2715,6 @@ ev_window_dispose (GObject *object)
        if (priv->local_uri) {
                ev_window_clear_local_uri (window);
        }
-
-       if (priv->password_document) {
-               g_object_unref (priv->password_document);
-               priv->password_document = NULL;
-       }
        
        ev_window_close_dialogs (window);