Improve drag_pointer error handling

Log errors generated by failed pointer grabs and ungrab the pointer
after failed keyboard grabs.
This commit is contained in:
Tony Crisci 2014-02-12 05:16:37 -05:00 committed by Michael Stapelberg
parent 62a4237ed0
commit 759c26fc02
1 changed files with 9 additions and 4 deletions

View File

@ -682,6 +682,8 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_
/* Grab the pointer */ /* Grab the pointer */
xcb_grab_pointer_cookie_t cookie; xcb_grab_pointer_cookie_t cookie;
xcb_grab_pointer_reply_t *reply; xcb_grab_pointer_reply_t *reply;
xcb_generic_error_t *error;
cookie = xcb_grab_pointer(conn, cookie = xcb_grab_pointer(conn,
false, /* get all pointer events specified by the following mask */ false, /* get all pointer events specified by the following mask */
root, /* grab the root window */ 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 */ xcursor, /* possibly display a special cursor */
XCB_CURRENT_TIME); XCB_CURRENT_TIME);
if ((reply = xcb_grab_pointer_reply(conn, cookie, NULL)) == NULL) { if ((reply = xcb_grab_pointer_reply(conn, cookie, &error)) == NULL) {
ELOG("Could not grab pointer\n"); ELOG("Could not grab pointer (error_code = %d)\n", error->error_code);
free(error);
return DRAG_ABORT; 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 */ XCB_GRAB_MODE_ASYNC /* keyboard mode */
); );
if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, NULL)) == NULL) { if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, &error)) == NULL) {
ELOG("Could not grab keyboard\n"); ELOG("Could not grab keyboard (error_code = %d)\n", error->error_code);
free(error);
xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
return DRAG_ABORT; return DRAG_ABORT;
} }