X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Feventdispatcher.cc;h=760f86a4435f51599d1bb5075af9f82cba263aa5;hb=00e2c5aaad4a0831fd1e0d1b1c287df4d6eaac93;hp=0c25ab08be823724f3b810f428cee7f534c57d6d;hpb=8c4357fccb29b1c4ddf560748b7e0b3e7285050a;p=chaz%2Fopenbox diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc index 0c25ab08..760f86a4 100644 --- a/otk/eventdispatcher.cc +++ b/otk/eventdispatcher.cc @@ -56,13 +56,23 @@ void OtkEventDispatcher::dispatchEvents(void) printf("Event %d window %lx\n", e.type, e.xany.window); #endif - // grab the lasttime + // grab the lasttime and hack up the modifiers switch (e.type) { case ButtonPress: case ButtonRelease: - _lasttime = e.xbutton.time; break; + _lasttime = e.xbutton.time; + e.xbutton.state &= ~(LockMask | OBDisplay::numLockMask() | + OBDisplay::scrollLockMask()); + break; + case KeyPress: + e.xkey.state &= ~(LockMask | OBDisplay::numLockMask() | + OBDisplay::scrollLockMask()); + break; case MotionNotify: - _lasttime = e.xmotion.time; break; + _lasttime = e.xmotion.time; + e.xmotion.state &= ~(LockMask | OBDisplay::numLockMask() | + OBDisplay::scrollLockMask()); + break; case PropertyNotify: _lasttime = e.xproperty.time; break; case EnterNotify: @@ -132,22 +142,22 @@ void OtkEventDispatcher::dispatchEvents(void) if (unfocus != None) { // the last focus event was an FocusOut, so where the hell is the focus at? -// printf("UNFOCUSING: %lx\n", unfocus); + //printf("UNFOCUSING: %lx\n", unfocus); _focus_e.xfocus.type = FocusOut; _focus_e.xfocus.window = unfocus; dispatch(_focus_e); _focus = None; - } else if (focus != None) { + } else if (focus != None && focus != _focus) { // the last focus event was a FocusIn, so unfocus what used to be focus and // focus this new target -// printf("FOCUSING: %lx\n", focus); + //printf("FOCUSING: %lx\n", focus); _focus_e.xfocus.type = FocusIn; _focus_e.xfocus.window = focus; dispatch(_focus_e); if (_focus != None) { -// printf("UNFOCUSING: %lx\n", _focus); + //printf("UNFOCUSING: %lx\n", _focus); _focus_e.xfocus.type = FocusOut; _focus_e.xfocus.window = _focus; dispatch(_focus_e);