]> git.sur5r.net Git - i3/i3/commitdiff
Improve drag_pointer error handling
authorTony Crisci <tony@dubstepdish.com>
Wed, 12 Feb 2014 10:16:37 +0000 (05:16 -0500)
committerMichael Stapelberg <michael@stapelberg.de>
Thu, 13 Feb 2014 20:06:32 +0000 (21:06 +0100)
Log errors generated by failed pointer grabs and ungrab the pointer
after failed keyboard grabs.

src/floating.c

index 1c35c8d0e854bb3364bd47e761dd26224b36e040..4180ba724903ea7494407016ef9ffdb77a7a6e99 100644 (file)
@@ -682,6 +682,8 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
     /* Grab the pointer */
     xcb_grab_pointer_cookie_t cookie;
     xcb_grab_pointer_reply_t *reply;
+    xcb_generic_error_t *error;
+
     cookie = xcb_grab_pointer(conn,
         false,               /* get all pointer events specified by the following mask */
         root,                /* grab the root window */
@@ -692,8 +694,9 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
         xcursor,             /* possibly display a special cursor */
         XCB_CURRENT_TIME);
 
-    if ((reply = xcb_grab_pointer_reply(conn, cookie, NULL)) == NULL) {
-        ELOG("Could not grab pointer\n");
+    if ((reply = xcb_grab_pointer_reply(conn, cookie, &error)) == NULL) {
+        ELOG("Could not grab pointer (error_code = %d)\n", error->error_code);
+        free(error);
         return DRAG_ABORT;
     }
 
@@ -711,8 +714,10 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
             XCB_GRAB_MODE_ASYNC /* keyboard mode */
             );
 
-    if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, NULL)) == NULL) {
-        ELOG("Could not grab keyboard\n");
+    if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, &error)) == NULL) {
+        ELOG("Could not grab keyboard (error_code = %d)\n", error->error_code);
+        free(error);
+        xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
         return DRAG_ABORT;
     }