]> Dogcows Code - chaz/openbox/blobdiff - otk/eventdispatcher.cc
install the shadow wrappers
[chaz/openbox] / otk / eventdispatcher.cc
index b3c8a587cb4e690b1e801d060f361df676e4727c..6c15a60bcf8d0aa9be411a517971eaf42b24630b 100644 (file)
@@ -11,7 +11,7 @@
 namespace otk {
 
 OtkEventDispatcher::OtkEventDispatcher()
-  : _fallback(0), _master(0), _focus(None)
+  : _fallback(0), _master(0)
 {
 }
 
@@ -99,65 +99,33 @@ 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");
 
+    // ignore FocusOut changes from grabs
+    if (e.xfocus.mode == NotifyGrab)
+      return;
+  
     // 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.027093 seconds and 4 git commands to generate.