X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fgrab.c;h=e934959ddf794e82c3a7b64a5d35bfd95488d29d;hb=9befe65a657c2f36f4ba6a2b94a180c55abf8f26;hp=b2426b9da51df569b854cfb3148fb94e03044b64;hpb=185d1337e553283530e23b1edff3bb709f04e9bb;p=chaz%2Fopenbox diff --git a/openbox/grab.c b/openbox/grab.c index b2426b9d..e934959d 100644 --- a/openbox/grab.c +++ b/openbox/grab.c @@ -6,6 +6,7 @@ #include #define GRAB_PTR_MASK (ButtonPressMask | ButtonReleaseMask | ButtonMotionMask) +#define GRAB_KEY_MASK (KeyPressMask | KeyReleaseMask) #define MASK_LIST_SIZE 8 @@ -17,8 +18,8 @@ int grab_keyboard(gboolean grab) static guint kgrabs = 0; if (grab) { if (kgrabs++ == 0) - XGrabKeyboard(ob_display, ob_root, 0, GrabModeAsync, GrabModeSync, - event_lasttime); + XGrabKeyboard(ob_display, ob_root, FALSE, GrabModeAsync, + GrabModeAsync, event_lasttime); } else if (kgrabs > 0) { if (--kgrabs == 0) XUngrabKeyboard(ob_display, event_lasttime); @@ -95,14 +96,19 @@ void grab_shutdown() while (grab_server(FALSE)); } -void grab_button(guint button, guint state, Window win, guint mask, - int pointer_mode) +void grab_button_full(guint button, guint state, Window win, guint mask, + int pointer_mode, Cursor cursor) { guint i; for (i = 0; i < MASK_LIST_SIZE; ++i) XGrabButton(ob_display, button, state | mask_list[i], win, FALSE, mask, - pointer_mode, GrabModeSync, None, None); + pointer_mode, GrabModeSync, None, cursor); +} + +void grab_button(guint button, guint state, Window win, guint mask) +{ + grab_button_full(button, state, win, mask, GrabModeAsync, None); } void ungrab_button(guint button, guint state, Window win) @@ -113,21 +119,21 @@ void ungrab_button(guint button, guint state, Window win) XUngrabButton(ob_display, button, state | mask_list[i], win); } -void grab_key(guint keycode, guint state, int keyboard_mode) +void grab_key(guint keycode, guint state, Window win, int keyboard_mode) { guint i; xerror_set_ignore(TRUE); /* can get BadAccess' from these */ xerror_occured = FALSE; for (i = 0; i < MASK_LIST_SIZE; ++i) - XGrabKey(ob_display, keycode, state | mask_list[i], ob_root, FALSE, + XGrabKey(ob_display, keycode, state | mask_list[i], win, FALSE, GrabModeSync, keyboard_mode); xerror_set_ignore(FALSE); if (xerror_occured) g_warning("failed to grab keycode %d modifiers %d", keycode, state); } -void ungrab_all_keys() +void ungrab_all_keys(Window win) { - XUngrabKey(ob_display, AnyKey, AnyModifier, ob_root); + XUngrabKey(ob_display, AnyKey, AnyModifier, win); }