]> Dogcows Code - chaz/openbox/blobdiff - otk/eventdispatcher.cc
better focus passing around for now
[chaz/openbox] / otk / eventdispatcher.cc
index bf2abeec1a289f7728d41c6f9a60aabbc7df6363..51e2251e201050b29fddf807debe9bbaded7784e 100644 (file)
@@ -56,6 +56,20 @@ void OtkEventDispatcher::dispatchEvents(void)
     printf("Event %d window %lx\n", e.type, e.xany.window);
 #endif
 
+    // grab the lasttime
+    switch (e.type) {
+    case ButtonPress:
+    case ButtonRelease:
+      _lasttime = e.xbutton.time; break;
+    case MotionNotify:
+      _lasttime = e.xmotion.time; 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 +132,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);
This page took 0.020883 seconds and 4 git commands to generate.