diff options
author | Stef Walter <stefw@collabora.co.uk> | 2011-11-14 08:54:50 +0100 |
---|---|---|
committer | Stef Walter <stefw@collabora.co.uk> | 2011-11-14 08:54:50 +0100 |
commit | 15bf6c05a9ed4148ed212735a735c2fbe7289908 (patch) | |
tree | 80979be8ff3383aed260875960a34beaad98622a | |
parent | fa7e6c389d92a2ab829da348bad751da545682d6 (diff) | |
download | gnome-keyring-15bf6c05a9ed4148ed212735a735c2fbe7289908.tar.gz |
ui: Fix problem with 'unsafe storage' prompt deadlocking
* The grab handler wasn't being removed before showing the
'unsafe storage' prompt.
* This deadlock would occur when the user pressed <Enter> in
a password field.
https://bugzilla.gnome.org/show_bug.cgi?id=661277
-rw-r--r-- | ui/gku-prompt-tool.c | 18 | ||||
-rw-r--r-- | ui/tests/files/prompt-create | 12 |
2 files changed, 24 insertions, 6 deletions
diff --git a/ui/gku-prompt-tool.c b/ui/gku-prompt-tool.c index c719b23a..a0f18e7b 100644 --- a/ui/gku-prompt-tool.c +++ b/ui/gku-prompt-tool.c @@ -62,6 +62,14 @@ static gsize n_the_key = 0; #define LOG_ERRORS 1 #define GRAB_KEYBOARD 1 +static gboolean grab_keyboard (GtkWidget *win, + GdkEvent *event, + gpointer unused); + +static gboolean ungrab_keyboard (GtkWidget *win, + GdkEvent *event, + gpointer unused); + /** * SECTION: gku-prompt-tool.c * @short_description: Displays a propmt for 3rd party programs (ssh, gnupg) @@ -108,9 +116,7 @@ grab_status_message (GdkGrabStatus status) static gboolean on_grab_broken (GtkWidget * widget, GdkEventGrabBroken * event) { - if (grabbed_device && event->keyboard) - grabbed_device = NULL; - + ungrab_keyboard (widget, (GdkEvent *)event, NULL); return TRUE; } @@ -145,11 +151,11 @@ grab_keyboard (GtkWidget *win, GdkEvent *event, gpointer unused) at = event ? gdk_event_get_time (event) : GDK_CURRENT_TIME; status = gdk_device_grab (device, gtk_widget_get_window (win), - GDK_OWNERSHIP_WINDOW, TRUE, - GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, at); + GDK_OWNERSHIP_APPLICATION, TRUE, + GDK_KEY_PRESS | GDK_KEY_RELEASE, NULL, at); if (status == GDK_GRAB_SUCCESS) { grab_broken_id = g_signal_connect (win, "grab-broken-event", - G_CALLBACK (on_grab_broken), NULL); + G_CALLBACK (on_grab_broken), NULL); gtk_device_grab_add (win, device, TRUE); grabbed_device = device; } else { diff --git a/ui/tests/files/prompt-create b/ui/tests/files/prompt-create new file mode 100644 index 00000000..07a25730 --- /dev/null +++ b/ui/tests/files/prompt-create @@ -0,0 +1,12 @@ +[prompt] +title=New Password +primary=Enter a new password here +secondary=This is a test of the new password prompt +window-id= + +[visibility] +name_area=false +password_area=true +confirm_area=true +details_area=true +options_area=true |