]> Dogcows Code - chaz/openbox/blobdiff - openbox/keyboard.c
for startup notification, use the left ptr+watch if it is available, and fall back...
[chaz/openbox] / openbox / keyboard.c
index b834046b9cdc4282a51f19093346c53d1d6852c0..432599e8245ba68e968664e8e419d3f87a0443a7 100644 (file)
@@ -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);
This page took 0.024807 seconds and 4 git commands to generate.