From b0e0bdeac5d40ca645afc9017778b39a26303523 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 11 Jan 2017 18:40:17 +0100 Subject: [PATCH 01/25] gtk2: Fix a problem with fvwm * gtk+-2/pinentry-gtk-2.c (grab_pointer): Take care of GDK_GRAB_ALREADY_GRABBED. -- Debian-bug-id: 850708 Co-authored-by: Vincent Lefevre Signed-off-by: Werner Koch --- gtk+-2/pinentry-gtk-2.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gtk+-2/pinentry-gtk-2.c b/gtk+-2/pinentry-gtk-2.c index 473c4aa..e37601f 100644 --- a/gtk+-2/pinentry-gtk-2.c +++ b/gtk+-2/pinentry-gtk-2.c @@ -203,7 +203,12 @@ grab_pointer (GtkWidget *win, GdkEvent *event, gpointer data) (void)data; /* Change the cursor for the duration of the grab to indicate that - something is going on. */ + * something is going on. The fvwm window manager grabs the pointer + * for a short time and thus we may end up with the already grabbed + * error code. Actually this error code should be used to detect a + * malicious grabbing application but with fvwm this renders + * Pinentry only unusable. Thus we try again several times also for + * that error code. See Debian bug 850708 for details. */ /* XXX: It would be nice to have a key cursor, unfortunately there is none readily available. */ cursor = gdk_cursor_new_for_display (gtk_widget_get_display (win), @@ -215,7 +220,8 @@ grab_pointer (GtkWidget *win, GdkEvent *event, gpointer data) NULL /* confine to */, cursor, gdk_event_get_time (event)); - while (tries++ < max_tries && err == GDK_GRAB_NOT_VIEWABLE); + while (tries++ < max_tries && (err == GDK_GRAB_NOT_VIEWABLE + || err == GDK_GRAB_ALREADY_GRABBED)); if (err) { -- 2.13.6