Blame SOURCES/evince-3.28.4-Show-password-dialog-again.patch

a3c8fb
From 1f250861fa2ec6a7117f183459e62ac285d85db6 Mon Sep 17 00:00:00 2001
a3c8fb
From: Marek Kasik <mkasik@redhat.com>
a3c8fb
Date: Tue, 2 Mar 2021 18:40:56 +0100
a3c8fb
Subject: [PATCH] window: Show password dialog again
a3c8fb
a3c8fb
Show password dialog when trying to open a document for which we've
a3c8fb
cancelled a password dialog before in recent view.
a3c8fb
a3c8fb
This is achieved by adding a signal "cancelled" to EvPasswordView since
a3c8fb
only successfull entering of password was signaled before by "unlock" signal.
a3c8fb
a3c8fb
We also need to unregister current document with EvApplication and clear its uri
a3c8fb
there to be able to open other documents in current window.
a3c8fb
---
a3c8fb
 shell/ev-application.c   | 16 ++++++++++++++++
a3c8fb
 shell/ev-application.h   |  1 +
a3c8fb
 shell/ev-password-view.c | 14 ++++++++++++++
a3c8fb
 shell/ev-password-view.h |  3 ++-
a3c8fb
 shell/ev-window.c        | 23 ++++++++++++++++++++++-
a3c8fb
 5 files changed, 55 insertions(+), 2 deletions(-)
a3c8fb
a3c8fb
a3c8fb
a3c8fb
From ef2d7ca9734c6a2e3ba0a80279d944352d355295 Mon Sep 17 00:00:00 2001
a3c8fb
From: Tom Schoonjans <Tom.Schoonjans@rfi.ac.uk>
a3c8fb
Date: Wed, 9 Jun 2021 06:39:48 +0100
a3c8fb
Subject: [PATCH] ev-application: fix compilation error when DBus is disabled
a3c8fb
a3c8fb
---
a3c8fb
 shell/ev-application.c | 2 ++
a3c8fb
 1 file changed, 2 insertions(+)
a3c8fb
a3c8fb
diff --git a/shell/ev-application.c b/shell/ev-application.c
a3c8fb
index 23871d9a..7a3b69ba 100644
a3c8fb
--- a/shell/ev-application.c
a3c8fb
+++ b/shell/ev-application.c
a3c8fb
@@ -539,6 +539,7 @@ ev_application_unregister_uri (EvApplication *application,
a3c8fb
 		g_error_free (error);
a3c8fb
 	} else {
a3c8fb
                 g_variant_unref (value);
a3c8fb
+		application->doc_registered = FALSE;
a3c8fb
 	}
a3c8fb
 }
a3c8fb
 #endif /* ENABLE_DBUS */
a3c8fb
@@ -1166,6 +1167,23 @@ ev_application_get_uri (EvApplication *application)
a3c8fb
 	return application->uri;
a3c8fb
 }
a3c8fb
 
a3c8fb
+/**
a3c8fb
+ * ev_application_clear_uri:
a3c8fb
+ * @application: The instance of the application.
a3c8fb
+ *
a3c8fb
+ * This unregisters current uri and clears it so that another document
a3c8fb
+ * can be opened in this instance. E.g. after cancelled password dialog
a3c8fb
+ * in recent view.
a3c8fb
+ */
a3c8fb
+void
a3c8fb
+ev_application_clear_uri (EvApplication *application)
a3c8fb
+{
a3c8fb
+#ifdef ENABLE_DBUS
a3c8fb
+	ev_application_unregister_uri (application, application->uri);
a3c8fb
+#endif
a3c8fb
+	g_clear_pointer (&application->uri, g_free);
a3c8fb
+}
a3c8fb
+
a3c8fb
 /**
a3c8fb
  * ev_application_get_media_keys:
a3c8fb
  * @application: The instance of the application.
a3c8fb
diff --git a/shell/ev-application.h b/shell/ev-application.h
a3c8fb
index 00a7a18b..f9b43ab3 100644
a3c8fb
--- a/shell/ev-application.h
a3c8fb
+++ b/shell/ev-application.h
a3c8fb
@@ -66,6 +66,7 @@ void	          ev_application_open_uri_list       (EvApplication   *application,
a3c8fb
 gboolean	  ev_application_has_window	     (EvApplication   *application);
a3c8fb
 guint             ev_application_get_n_windows       (EvApplication   *application);
a3c8fb
 const gchar *     ev_application_get_uri             (EvApplication   *application);
a3c8fb
+void              ev_application_clear_uri           (EvApplication   *application);
a3c8fb
 GObject		 *ev_application_get_media_keys	     (EvApplication   *application);
a3c8fb
 
a3c8fb
 const gchar      *ev_application_get_dot_dir         (EvApplication   *application,
a3c8fb
diff --git a/shell/ev-password-view.c b/shell/ev-password-view.c
a3c8fb
index 9a916d55..0dab3c51 100644
a3c8fb
--- a/shell/ev-password-view.c
a3c8fb
+++ b/shell/ev-password-view.c
a3c8fb
@@ -38,6 +38,7 @@
a3c8fb
 
a3c8fb
 enum {
a3c8fb
 	UNLOCK,
a3c8fb
+	CANCELLED,
a3c8fb
 	LAST_SIGNAL
a3c8fb
 };
a3c8fb
 struct _EvPasswordViewPrivate {
a3c8fb
@@ -91,6 +92,15 @@ ev_password_view_class_init (EvPasswordViewClass *class)
a3c8fb
 			      g_cclosure_marshal_VOID__VOID,
a3c8fb
 			      G_TYPE_NONE, 0);
a3c8fb
 
a3c8fb
+	password_view_signals[CANCELLED] =
a3c8fb
+		g_signal_new ("cancelled",
a3c8fb
+			      G_TYPE_FROM_CLASS (g_object_class),
a3c8fb
+			      G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
a3c8fb
+			      G_STRUCT_OFFSET (EvPasswordViewClass, cancelled),
a3c8fb
+			      NULL, NULL,
a3c8fb
+			      g_cclosure_marshal_VOID__VOID,
a3c8fb
+			      G_TYPE_NONE, 0);
a3c8fb
+
a3c8fb
 	g_type_class_add_private (g_object_class, sizeof (EvPasswordViewPrivate));
a3c8fb
 
a3c8fb
 	g_object_class->finalize = ev_password_view_finalize;
a3c8fb
@@ -183,6 +193,10 @@ ev_password_dialog_got_response (GtkDialog      *dialog,
a3c8fb
 			g_strdup (gtk_entry_get_text (GTK_ENTRY (password_view->priv->password_entry)));
a3c8fb
 		
a3c8fb
 		g_signal_emit (password_view, password_view_signals[UNLOCK], 0);
a3c8fb
+	} else if (response_id == GTK_RESPONSE_CANCEL ||
a3c8fb
+		   response_id == GTK_RESPONSE_CLOSE ||
a3c8fb
+		   response_id == GTK_RESPONSE_DELETE_EVENT) {
a3c8fb
+		g_signal_emit (password_view, password_view_signals[CANCELLED], 0);
a3c8fb
 	}
a3c8fb
 	
a3c8fb
 	gtk_widget_destroy (GTK_WIDGET (dialog));
a3c8fb
diff --git a/shell/ev-password-view.h b/shell/ev-password-view.h
a3c8fb
index c3fc5bbc..e279c612 100644
a3c8fb
--- a/shell/ev-password-view.h
a3c8fb
+++ b/shell/ev-password-view.h
a3c8fb
@@ -40,7 +40,8 @@ struct _EvPasswordViewClass {
a3c8fb
 	GtkViewportClass parent_class;
a3c8fb
 
a3c8fb
 	/* signals */
a3c8fb
-	void (*unlock) (EvPasswordView	*self);
a3c8fb
+	void (*unlock)    (EvPasswordView	*self);
a3c8fb
+	void (*cancelled) (EvPasswordView	*self);
a3c8fb
 };
a3c8fb
 
a3c8fb
 GType	      ev_password_view_get_type                (void) G_GNUC_CONST;
a3c8fb
diff --git a/shell/ev-window.c b/shell/ev-window.c
a3c8fb
index 077d577d..f728fa77 100644
a3c8fb
--- a/shell/ev-window.c
a3c8fb
+++ b/shell/ev-window.c
a3c8fb
@@ -239,6 +239,8 @@ typedef struct {
a3c8fb
 
a3c8fb
 	/* Send to */
a3c8fb
 	gboolean has_mailto_handler;
a3c8fb
+
a3c8fb
+	gboolean password_view_cancelled;
a3c8fb
 };
a3c8fb
 
a3c8fb
 #define EV_WINDOW_GET_PRIVATE(object) \
a3c8fb
@@ -1804,6 +1806,7 @@ ev_window_password_view_unlock (EvWindow *ev_window)
a3c8fb
 	password = ev_password_view_get_password (EV_PASSWORD_VIEW (ev_window->priv->password_view));
a3c8fb
 	ev_job_load_set_password (EV_JOB_LOAD (ev_window->priv->load_job), password);
a3c8fb
 	ev_job_scheduler_push_job (ev_window->priv->load_job, EV_JOB_PRIORITY_NONE);
a3c8fb
+	ev_window->priv->password_view_cancelled = FALSE;
a3c8fb
 }
a3c8fb
 
a3c8fb
 static void
a3c8fb
@@ -1821,6 +1824,18 @@ ev_window_clear_load_job (EvWindow *ev_window)
a3c8fb
 	}
a3c8fb
 }
a3c8fb
 
a3c8fb
+static void
a3c8fb
+ev_window_password_view_cancelled (EvWindow *ev_window)
a3c8fb
+{
a3c8fb
+	EvWindowPrivate *priv = ev_window->priv;
a3c8fb
+
a3c8fb
+	priv->password_view_cancelled = TRUE;
a3c8fb
+	if (ev_window_is_recent_view (ev_window)) {
a3c8fb
+		ev_window_clear_load_job (ev_window);
a3c8fb
+		ev_application_clear_uri (EV_APP);
a3c8fb
+	}
a3c8fb
+}
a3c8fb
+
a3c8fb
 static void
a3c8fb
 ev_window_clear_reload_job (EvWindow *ev_window)
a3c8fb
 {
a3c8fb
@@ -2395,7 +2410,8 @@ ev_window_open_uri (EvWindow       *ev_window,
a3c8fb
 		g_strdup (search_string) : NULL;
a3c8fb
 
a3c8fb
 	if (ev_window->priv->uri &&
a3c8fb
-	    g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0) {
a3c8fb
+	    g_ascii_strcasecmp (ev_window->priv->uri, uri) == 0 &&
a3c8fb
+	    !ev_window->priv->password_view_cancelled) {
a3c8fb
 		ev_window_reload_document (ev_window, dest);
a3c8fb
 		return;
a3c8fb
 	}
a3c8fb
@@ -7643,11 +7659,16 @@ ev_window_init (EvWindow *ev_window)
a3c8fb
 				     allow_links_change_zoom);
a3c8fb
 	ev_view_set_model (EV_VIEW (ev_window->priv->view), ev_window->priv->model);
a3c8fb
 
a3c8fb
+	ev_window->priv->password_view_cancelled = FALSE;
a3c8fb
 	ev_window->priv->password_view = ev_password_view_new (GTK_WINDOW (ev_window));
a3c8fb
 	g_signal_connect_swapped (ev_window->priv->password_view,
a3c8fb
 				  "unlock",
a3c8fb
 				  G_CALLBACK (ev_window_password_view_unlock),
a3c8fb
 				  ev_window);
a3c8fb
+	g_signal_connect_swapped (ev_window->priv->password_view,
a3c8fb
+				  "cancelled",
a3c8fb
+				  G_CALLBACK (ev_window_password_view_cancelled),
a3c8fb
+				  ev_window);
a3c8fb
 	g_signal_connect_object (ev_window->priv->view, "focus_in_event",
a3c8fb
 			         G_CALLBACK (view_actions_focus_in_cb),
a3c8fb
 				 ev_window, 0);
a3c8fb
-- 
a3c8fb
2.31.1
a3c8fb