]> Dogcows Code - chaz/openbox/commitdiff
handle focus events SOO much more simply. and it works. fuck yes. at last. i think...
authorDana Jansens <danakj@orodu.net>
Wed, 8 Jan 2003 08:40:03 +0000 (08:40 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 8 Jan 2003 08:40:03 +0000 (08:40 +0000)
otk/eventdispatcher.cc

index b3c8a587cb4e690b1e801d060f361df676e4727c..621cd6fcc7375ef40346ddf46e84d0d5312a0270 100644 (file)
@@ -99,65 +99,30 @@ void OtkEventDispatcher::dispatchEvents(void)
 
 void OtkEventDispatcher::dispatchFocus(const XEvent &e)
 {
-  Window newfocus = None;
-  
-  // any other types are not ones we're interested in
-  if (e.xfocus.detail != NotifyNonlinear)
-    return;
   
   if (e.type == FocusIn) {
-    printf("---\n");
-    printf("Got FocusIn!\n");
-    printf("Using FocusIn\n");
-    newfocus = e.xfocus.window;
-
-    if (newfocus != _focus) {
-      // send a FocusIn to whatever was just focused
-      dispatch(newfocus, e);
-      printf("Sent FocusIn 0x%lx\n", newfocus);
-
-      // send a FocusOut to whatever used to be focused
-      if (_focus) {
-        XEvent ev;
-        ev.xfocus = e.xfocus;
-        ev.xfocus.window = _focus;
-        ev.type = FocusOut;
-        dispatch(_focus, ev);
-        printf("Sent FocusOut 0x%lx\n", _focus);
-      }
+    //printf("Got FocusIn!\n");
+
+    // send a FocusIn to whatever was just focused
+    dispatch(e.xfocus.window, e);
+    //printf("Sent FocusIn 0x%lx\n", e.xfocus.window);
 
-      // store the new focused window
-      _focus = newfocus;
-    }
-      
   } else if (e.type == FocusOut) {
-    bool focused = false; // found a new focus target?
-    printf("---\n");
-    printf("Got FocusOut!\n");
+    //printf("Got FocusOut!\n");
 
     // FocusOut events just make us look for FocusIn events. They are ignored
     // otherwise.
     XEvent fi;
-    while (XCheckTypedEvent(OBDisplay::display, FocusIn, &fi)) {
-      if (e.xfocus.detail == NotifyNonlinear) {
-        printf("Found FocusIn\n");
-        dispatchFocus(fi);
-        focused = true;
-        break;
-      }
-    }
-    if (!focused) {
-      // send a FocusOut to whatever used to be focused
-      if (_focus) {
-        XEvent ev;
-        ev.xfocus = e.xfocus;
-        ev.xfocus.window = _focus;
-        dispatch(_focus, ev);
-        printf("Sent FocusOut 0x%lx\n", _focus);
-      }
-      // store that no window has focus anymore
-      _focus = None;
+    if (XCheckTypedEvent(OBDisplay::display, FocusIn, &fi)) {
+      //printf("Found FocusIn\n");
+      dispatchFocus(fi);
+      // dont unfocus the window we just focused!
+      if (fi.xfocus.window == e.xfocus.window)
+        return;
     }
+
+    dispatch(e.xfocus.window, e);
+    //printf("Sent FocusOut 0x%lx\n", e.xfocus.window);
   }
 }
 
This page took 0.023244 seconds and 4 git commands to generate.