From 759c26fc02be122dd1f72be3ea425c29a07de639 Mon Sep 17 00:00:00 2001 From: Tony Crisci Date: Wed, 12 Feb 2014 05:16:37 -0500 Subject: [PATCH] Improve drag_pointer error handling Log errors generated by failed pointer grabs and ungrab the pointer after failed keyboard grabs. --- src/floating.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) 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; } -- 2.39.5