]> Dogcows Code - chaz/openbox/blobdiff - otk/eventdispatcher.cc
move the focus_order lists into the kernel
[chaz/openbox] / otk / eventdispatcher.cc
index 8c245ddeb3f00a24d517806ab82a8fbe46cc8b8f..1b90dbc0d3f9a813b2bf94f19ec4400bdcdd9575 100644 (file)
@@ -1,18 +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"
 
-extern "C" {
-#ifdef HAVE_STDIO_H
-#  include <stdio.h>
-#endif
-}
-
+#include <cstdio>
 #include <iostream>
 
 namespace otk {
@@ -41,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)
This page took 0.020386 seconds and 4 git commands to generate.