]> Dogcows Code - chaz/openbox/blobdiff - otk/eventdispatcher.cc
move the focus_order lists into the kernel
[chaz/openbox] / otk / eventdispatcher.cc
index a1858eee49917872d17b90ce6beccbc1cdb3be1c..1b90dbc0d3f9a813b2bf94f19ec4400bdcdd9575 100644 (file)
@@ -1,11 +1,11 @@
 // -*- mode: C++; indent-tabs-mode: nil; c-basic-offset: 2; -*-
 
-#ifdef HAVE_CONFIG_H
-# include "../config.h"
-#endif
+#include "config.h"
 
 #include "eventdispatcher.hh"
 #include "display.hh"
+
+#include <cstdio>
 #include <iostream>
 
 namespace otk {
@@ -34,11 +34,32 @@ void EventDispatcher::clearHandler(Window id)
   _map.erase(id);
 }
 
-void EventDispatcher::dispatchEvents(void)
+void EventDispatcher::dispatchEvents(bool remote)
 {
   XEvent e;
 
-  while (XPending(**display)) {
+  while (true) {
+    /*
+      There are slightly different event retrieval semantics here for local (or
+      high bandwidth) versus remote (or low bandwidth) connections to the
+      display/Xserver.
+    */
+    if (remote) {
+      if (!XPending(**display))
+        return;
+    } else {
+      /*
+        This XSync allows for far more compression of events, which makes
+        things like Motion events perform far far better. Since it also means
+        network traffic for every event instead of every X events (where X is
+        the number retrieved at a time), it probably should not be used for
+        setups where Openbox is running on a remote/low bandwidth
+        display/Xserver.
+      */
+      XSync(**display, false);
+      if (!XEventsQueued(**display, QueuedAlready))
+        return;
+    }
     XNextEvent(**display, &e);
 
 #if 0//defined(DEBUG)
@@ -165,7 +186,11 @@ void EventDispatcher::dispatch(Window win, const XEvent &e)
     xwc.border_width = e.xconfigurerequest.border_width;
     xwc.sibling = e.xconfigurerequest.above;
     xwc.stack_mode = e.xconfigurerequest.detail;
-
+    
+#ifdef DEBUG
+    printf("Proxying configure event for 0x%lx\n", e.xconfigurerequest.window);
+#endif
+    
     // we are not to be held responsible if someone sends us an invalid
     // request!
     display->setIgnoreErrors(true); 
This page took 0.020908 seconds and 4 git commands to generate.