X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=otk%2Feventdispatcher.cc;h=760f86a4435f51599d1bb5075af9f82cba263aa5;hb=4c768d5d63154e416e1282396dc48492d0585d42;hp=bf2abeec1a289f7728d41c6f9a60aabbc7df6363;hpb=37c2e0f3296b4c1334ee92001c446d1bcc7665ee;p=chaz%2Fopenbox diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc index bf2abeec..760f86a4 100644 --- a/otk/eventdispatcher.cc +++ b/otk/eventdispatcher.cc @@ -56,6 +56,30 @@ void OtkEventDispatcher::dispatchEvents(void) printf("Event %d window %lx\n", e.type, e.xany.window); #endif + // grab the lasttime and hack up the modifiers + switch (e.type) { + case ButtonPress: + case ButtonRelease: + _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; + e.xmotion.state &= ~(LockMask | OBDisplay::numLockMask() | + OBDisplay::scrollLockMask()); + break; + case PropertyNotify: + _lasttime = e.xproperty.time; break; + case EnterNotify: + case LeaveNotify: + _lasttime = e.xcrossing.time; break; + } + // these ConfigureRequests require some special attention if (e.type == ConfigureRequest) { // find the actual window! e.xany.window is the parent window @@ -118,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);