From: Tony Crisci Date: Wed, 12 Feb 2014 10:16:37 +0000 (-0500) Subject: Improve drag_pointer error handling X-Git-Tag: 4.8~116 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=759c26fc02be122dd1f72be3ea425c29a07de639;p=i3%2Fi3 Improve drag_pointer error handling Log errors generated by failed pointer grabs and ungrab the pointer after failed keyboard grabs. --- diff --git a/src/floating.c b/src/floating.c index 1c35c8d0..4180ba72 100644 --- a/src/floating.c +++ b/src/floating.c @@ -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; }