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:
parent
62a4237ed0
commit
759c26fc02
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue