// -*- 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 {
_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)
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);