X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fkeyboard.c;h=432599e8245ba68e968664e8e419d3f87a0443a7;hb=ed4d0ca31a9c1c6c815cb87a058bb1d36a0888c1;hp=b834046b9cdc4282a51f19093346c53d1d6852c0;hpb=9fcb2aa1d25ec9889b45d145939fb17160b1106a;p=chaz%2Fopenbox diff --git a/openbox/keyboard.c b/openbox/keyboard.c index b834046b..432599e8 100644 --- a/openbox/keyboard.c +++ b/openbox/keyboard.c @@ -31,7 +31,6 @@ #include "config.h" #include "keytree.h" #include "keyboard.h" -#include "translate.h" #include "moveresize.h" #include "popup.h" #include "gettext.h" @@ -293,7 +292,16 @@ void keyboard_event(ObClient *client, const XEvent *e) p = curpos->first_child; while (p) { if (p->key == e->xkey.keycode && - p->state == e->xkey.state) + /* tricksy. + if you have Super_L and Super_R bound to different modXmasks, + this makes either mod mask count as Super + + e.g. Super_L is mod1 and Super_R is mod2, so.. + p->state = 00011 + key state is just Super_L so 00001 + 00011 | 00001 == 00011 == p->state + */ + (p->state | e->xkey.state) == p->state) { /* if we hit a key binding, then close any open menus and run it */ if (menu_frame_visible) @@ -311,6 +319,14 @@ void keyboard_event(ObClient *client, const XEvent *e) else { keyboard_reset_chains(0); + /* If we don't have the keyboard grabbed, then ungrab it with + XUngrabKeyboard, so that there is not a passive grab left + on from the KeyPress. If the grab is left on, and focus + moves during that time, it will be NotifyWhileGrabbed, and + applications like to ignore those! */ + if (!keyboard_interactively_grabbed()) + XUngrabKeyboard(ob_display, e->xkey.time); + action_run_key(p->actions, client, e->xkey.state, e->xkey.x_root, e->xkey.y_root, e->xkey.time);