]> Dogcows Code - chaz/openbox/commitdiff
make stacked cycling work without a modifier-key binding, i think. cleaner checking...
authorDana Jansens <danakj@orodu.net>
Tue, 11 Feb 2003 09:52:24 +0000 (09:52 +0000)
committerDana Jansens <danakj@orodu.net>
Tue, 11 Feb 2003 09:52:24 +0000 (09:52 +0000)
scripts/motion.py
scripts/stackedcycle.py
src/actions.cc

index e0a1d3522fbe6c3e1cb9f55136157f1e272e79fc..ef05b2792a49eb1d24c15be3711fccc58f5fd951 100644 (file)
@@ -80,15 +80,15 @@ _motion_mask = 0
 def _motion_grab(data):
     global _motion_mask, _inmove, _inresize;
 
-    if data.action == ob.KeyAction.Release:
-        # have all the modifiers this started with been released?
-        if not _motion_mask & data.state:
-            if _inmove:
-                _end_move(data)
-            elif _inresize:
-                _end_resize(data)
-            else:
-                raise RuntimeError
+    # are all the modifiers this started with still pressed?
+    print _motion_mask, data.state
+    if not _motion_mask == data.state:
+        if _inmove:
+            _end_move(data)
+        elif _inresize:
+            _end_resize(data)
+        else:
+            raise RuntimeError
 
 _last_x = 0
 _last_y = 0
@@ -160,13 +160,14 @@ def _move(data):
     # not-normal windows dont get moved
     if not data.client.normal(): return
 
-    global _screen, _client, _cx, _cy, _dx, _dy
+    global _screen, _client, _cx, _cy, _dx, _dy, _motion_mask
     _screen = data.screen
     _client = data.client
     _cx = data.press_clientx
     _cy = data.press_clienty
     _dx = data.xroot - data.pressx
     _dy = data.yroot - data.pressy
+    _motion_mask = data.state
     _do_move()
     global _inmove
     if not _inmove:
@@ -245,6 +246,7 @@ def _resize(data):
     if not data.client.normal(): return
 
     global _screen, _client, _cx, _cy, _cw, _ch, _px, _py, _dx, _dy
+    global _motion_mask
     _screen = data.screen
     _client = data.client
     _cx = data.press_clientx
@@ -255,6 +257,7 @@ def _resize(data):
     _py = data.pressy
     _dx = data.xroot - _px
     _dy = data.yroot - _py
+    _motion_mask = data.state
     _do_resize()
     global _inresize
     if not _inresize:
index 6e46503dd0dce3eefaa0bb74e04ad907846cf098..1667a54aad7bab4aebaf2081194f3036f08888b6 100644 (file)
@@ -218,15 +218,18 @@ class _cycledata:
         done = 0
         notreverting = 1
         # have all the modifiers this started with been released?
-        if (data.action == ob.KeyAction.Release and
-            not self.state & data.state):
+        if not self.state == data.state:
             done = 1
-        # has Escape been pressed?
-        elif data.action == ob.KeyAction.Press and data.key == "Escape":
-            done = 1
-            notreverting = 0
-            # revert
-            self.menupos = 0
+        elif data.action == ob.KeyAction.Press:
+            # has Escape been pressed?
+            if data.key == "Escape":
+                done = 1
+                notreverting = 0
+                # revert
+                self.menupos = 0
+            # has Enter been pressed?
+            elif data.key == "Return":
+                done = 1
 
         if done:
             # activate, and deiconify/unshade/raise
index 3a7ff36982898fee3d18e8f1dc3013afc8fdb8e4..65931fc6b7380fad54a3262f85d776faac07c764 100644 (file)
@@ -230,6 +230,26 @@ void Actions::keyPressHandler(const XKeyEvent &e)
   // kill off the Button1Mask etc, only want the modifiers
   unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
                                   Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask);
+
+  // add to the state the mask of the modifier being pressed, if it is
+  // a modifier key being pressed (this is a little ugly..)
+  const XModifierKeymap *map = otk::display->modifierMap();
+  const int mask_table[] = {
+    ShiftMask, LockMask, ControlMask, Mod1Mask,
+    Mod2Mask, Mod3Mask, Mod4Mask, Mod5Mask
+  };
+  KeyCode *kp = map->modifiermap;
+  for (int i = 0, n = sizeof(mask_table)/sizeof(mask_table[0]); i < n; ++i) {
+    for (int k = 0; k < map->max_keypermod; ++k) {
+      if (*kp == e.keycode) { // found the keycode
+        state |= mask_table[i]; // add the mask for it
+        i = n; // cause the first loop to break;
+        break; // get outta here!
+      }
+      ++kp;
+    }
+  }
+  
   openbox->bindings()->
     fireKey(otk::display->findScreen(e.root)->screen(),
             state, e.keycode, e.time, KeyAction::Press);
This page took 0.027829 seconds and 4 git commands to generate.