summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStef Walter <stefw@collabora.co.uk>2011-11-14 08:54:50 +0100
committerStef Walter <stefw@collabora.co.uk>2011-11-14 08:54:50 +0100
commit15bf6c05a9ed4148ed212735a735c2fbe7289908 (patch)
tree80979be8ff3383aed260875960a34beaad98622a
parentfa7e6c389d92a2ab829da348bad751da545682d6 (diff)
downloadgnome-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.c18
-rw-r--r--ui/tests/files/prompt-create12
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