make stacked cycling work without a modifier-key binding, i think. cleaner checking for modifiers in motion and stackedcycle.

This commit is contained in:
Dana Jansens 2003-02-11 09:52:24 +00:00
parent 5af3950710
commit 6ae8608aed
3 changed files with 44 additions and 18 deletions

View file

@ -80,15 +80,15 @@ _motion_mask = 0
def _motion_grab(data): def _motion_grab(data):
global _motion_mask, _inmove, _inresize; global _motion_mask, _inmove, _inresize;
if data.action == ob.KeyAction.Release: # are all the modifiers this started with still pressed?
# have all the modifiers this started with been released? print _motion_mask, data.state
if not _motion_mask & data.state: if not _motion_mask == data.state:
if _inmove: if _inmove:
_end_move(data) _end_move(data)
elif _inresize: elif _inresize:
_end_resize(data) _end_resize(data)
else: else:
raise RuntimeError raise RuntimeError
_last_x = 0 _last_x = 0
_last_y = 0 _last_y = 0
@ -160,13 +160,14 @@ def _move(data):
# not-normal windows dont get moved # not-normal windows dont get moved
if not data.client.normal(): return 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 _screen = data.screen
_client = data.client _client = data.client
_cx = data.press_clientx _cx = data.press_clientx
_cy = data.press_clienty _cy = data.press_clienty
_dx = data.xroot - data.pressx _dx = data.xroot - data.pressx
_dy = data.yroot - data.pressy _dy = data.yroot - data.pressy
_motion_mask = data.state
_do_move() _do_move()
global _inmove global _inmove
if not _inmove: if not _inmove:
@ -245,6 +246,7 @@ def _resize(data):
if not data.client.normal(): return if not data.client.normal(): return
global _screen, _client, _cx, _cy, _cw, _ch, _px, _py, _dx, _dy global _screen, _client, _cx, _cy, _cw, _ch, _px, _py, _dx, _dy
global _motion_mask
_screen = data.screen _screen = data.screen
_client = data.client _client = data.client
_cx = data.press_clientx _cx = data.press_clientx
@ -255,6 +257,7 @@ def _resize(data):
_py = data.pressy _py = data.pressy
_dx = data.xroot - _px _dx = data.xroot - _px
_dy = data.yroot - _py _dy = data.yroot - _py
_motion_mask = data.state
_do_resize() _do_resize()
global _inresize global _inresize
if not _inresize: if not _inresize:

View file

@ -218,15 +218,18 @@ class _cycledata:
done = 0 done = 0
notreverting = 1 notreverting = 1
# have all the modifiers this started with been released? # have all the modifiers this started with been released?
if (data.action == ob.KeyAction.Release and if not self.state == data.state:
not self.state & data.state):
done = 1 done = 1
# has Escape been pressed? elif data.action == ob.KeyAction.Press:
elif data.action == ob.KeyAction.Press and data.key == "Escape": # has Escape been pressed?
done = 1 if data.key == "Escape":
notreverting = 0 done = 1
# revert notreverting = 0
self.menupos = 0 # revert
self.menupos = 0
# has Enter been pressed?
elif data.key == "Return":
done = 1
if done: if done:
# activate, and deiconify/unshade/raise # activate, and deiconify/unshade/raise

View file

@ -230,6 +230,26 @@ void Actions::keyPressHandler(const XKeyEvent &e)
// kill off the Button1Mask etc, only want the modifiers // kill off the Button1Mask etc, only want the modifiers
unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask | unsigned int state = e.state & (ControlMask | ShiftMask | Mod1Mask |
Mod2Mask | Mod3Mask | Mod4Mask | Mod5Mask); 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()-> openbox->bindings()->
fireKey(otk::display->findScreen(e.root)->screen(), fireKey(otk::display->findScreen(e.root)->screen(),
state, e.keycode, e.time, KeyAction::Press); state, e.keycode, e.time, KeyAction::Press);