Improve drag_pointer error handling
Patch status: merged
Patch by Tony Crisci
Long description:
Log errors generated by failed pointer grabs and ungrab the pointer after failed keyboard grabs.
To apply this patch, use:
curl http://cr.i3wm.org/patch/422/raw.patch | git am
b/src/floating.c
15 |
@@ -682,6 +682,8 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_ |
16 |
/* Grab the pointer */ |
17 |
xcb_grab_pointer_cookie_t cookie; |
18 |
xcb_grab_pointer_reply_t *reply; |
19 |
+ xcb_generic_error_t *error; |
20 |
+ |
21 |
cookie = xcb_grab_pointer(conn, |
22 |
false, /* get all pointer events specified by the following mask */ |
23 |
root, /* grab the root window */ |
24 |
@@ -692,8 +694,9 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_ |
25 |
xcursor, /* possibly display a special cursor */ |
26 |
XCB_CURRENT_TIME); |
27 |
|
28 |
- if ((reply = xcb_grab_pointer_reply(conn, cookie, NULL)) == NULL) { |
29 |
- ELOG("Could not grab pointer\n"); |
30 |
+ if ((reply = xcb_grab_pointer_reply(conn, cookie, &error)) == NULL) { |
31 |
+ ELOG("Could not grab pointer (error_code = %d)\n", error->error_code); |
32 |
+ free(error); |
33 |
return DRAG_ABORT; |
34 |
} |
35 |
|
36 |
@@ -711,8 +714,10 @@ drag_result_t drag_pointer(Con *con, const xcb_button_press_event_t *event, xcb_ |
37 |
XCB_GRAB_MODE_ASYNC /* keyboard mode */ |
38 |
); |
39 |
|
40 |
- if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, NULL)) == NULL) { |
41 |
- ELOG("Could not grab keyboard\n"); |
42 |
+ if ((keyb_reply = xcb_grab_keyboard_reply(conn, keyb_cookie, &error)) == NULL) { |
43 |
+ ELOG("Could not grab keyboard (error_code = %d)\n", error->error_code); |
44 |
+ free(error); |
45 |
+ xcb_ungrab_pointer(conn, XCB_CURRENT_TIME); |
46 |
return DRAG_ABORT; |
47 |
} |
48 |
|