blob: 2c9c5bb16b8a2df6e58487ba58aeae8fc755e02d [file] [log] [blame]
Patrick Williams8e7b46e2023-05-01 14:19:06 -05001From: Jeffrey Knockel <jeff250@gmail.com>
2Date: Mon, 30 Apr 2018 18:05:20 +0000
3Subject: Use fresh X11 timestamps when displaying authentication dialog
4
5This circumvents focus-stealing prevention.
6
7Bug: https://bugzilla.gnome.org/show_bug.cgi?id=676076
8Bug-Debian: https://bugs.debian.org/684300
9Bug-Ubuntu: https://launchpad.net/bugs/946171
10
11Upstream-Status: Pending
12Signed-off-by: Khem Raj <raj.khem@gmail.com>
13---
14 src/polkitgnomeauthenticator.c | 4 +++-
15 1 file changed, 3 insertions(+), 1 deletion(-)
16
17diff --git a/src/polkitgnomeauthenticator.c b/src/polkitgnomeauthenticator.c
18index 23163b4..e57d76e 100644
19--- a/src/polkitgnomeauthenticator.c
20+++ b/src/polkitgnomeauthenticator.c
21@@ -26,6 +26,7 @@
22 #include <sys/types.h>
23 #include <pwd.h>
24 #include <glib/gi18n.h>
25+#include <gdk/gdkx.h>
26
27 #include <polkit/polkit.h>
28 #include <polkitagent/polkitagent.h>
29@@ -306,7 +307,17 @@ session_request (PolkitAgentSession *session,
30 }
31
32 gtk_widget_show_all (GTK_WIDGET (authenticator->dialog));
33- gtk_window_present (GTK_WINDOW (authenticator->dialog));
34+ GdkWindow *window = gtk_widget_get_window (GTK_WIDGET (authenticator->dialog));
35+
36+ if (GDK_IS_X11_WINDOW (window))
37+ {
38+ gtk_window_present_with_time (GTK_WINDOW (authenticator->dialog), gdk_x11_get_server_time (window));
39+ }
40+ else
41+ {
42+ gtk_window_present (GTK_WINDOW (authenticator->dialog));
43+ }
44+
45 password = polkit_gnome_authentication_dialog_run_until_response_for_prompt (POLKIT_GNOME_AUTHENTICATION_DIALOG (authenticator->dialog),
46 modified_request,
47 echo_on,
48