gtk2: Print keyboard grabbing errors.
authorJustus Winter <justus@g10code.com>
Mon, 1 Aug 2016 15:18:32 +0000 (17:18 +0200)
committerJustus Winter <justus@g10code.com>
Mon, 1 Aug 2016 15:20:06 +0000 (17:20 +0200)
* gtk+-2/pinentry-gtk-2.c (grab_strerror): New function.
(grab_keyboard): Use the new function to print the error.

Signed-off-by: Justus Winter <justus@g10code.com>
gtk+-2/pinentry-gtk-2.c

index 98d4fc2..3fff176 100644 (file)
@@ -145,22 +145,41 @@ make_transient (GtkWidget *win, GdkEvent *event, gpointer data)
 }
 
 
+/* Convert GdkGrabStatus to string.  */
+static const char *
+grab_strerror (GdkGrabStatus status)
+{
+  switch (status) {
+  case GDK_GRAB_SUCCESS: return "success";
+  case GDK_GRAB_ALREADY_GRABBED: return "already grabbed";
+  case GDK_GRAB_INVALID_TIME: return "invalid time";
+  case GDK_GRAB_NOT_VIEWABLE: return "not viewable";
+  case GDK_GRAB_FROZEN: return "frozen";
+  }
+  return "unknown";
+}
+
+
 /* Grab the keyboard for maximum security */
 static int
 grab_keyboard (GtkWidget *win, GdkEvent *event, gpointer data)
 {
+  GdkGrabStatus err;
   (void)data;
 
   if (! pinentry->grab)
     return FALSE;
 
-  if (gdk_keyboard_grab (gtk_widget_get_window (win),
-                        FALSE, gdk_event_get_time (event)))
+  err = gdk_keyboard_grab (gtk_widget_get_window (win),
+                           FALSE, gdk_event_get_time (event));
+  if (err)
     {
-      g_critical ("could not grab keyboard");
+      g_critical ("could not grab keyboard: %s (%d)",
+                  grab_strerror (err), err);
       grab_failed = 1;
       gtk_main_quit ();
     }
+
   return FALSE;
 }