summaryrefslogtreecommitdiff
path: root/otk/eventdispatcher.cc
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-02-19 00:58:59 +0000
committerDana Jansens <danakj@orodu.net>2003-02-19 00:58:59 +0000
commitd647de97bec82fa6c229a4801908b847f631f031 (patch)
tree5369ed520bc4836dafa245844b67946673eb1401 /otk/eventdispatcher.cc
parentd8429b31b450c41973947eeec1f27af3b2807409 (diff)
add the new '-remote' option. let the dispatchEvents loop work in 'local' or 'remote' mode.
Diffstat (limited to 'otk/eventdispatcher.cc')
-rw-r--r--otk/eventdispatcher.cc25
1 files changed, 23 insertions, 2 deletions
diff --git a/otk/eventdispatcher.cc b/otk/eventdispatcher.cc
index 0560eec8..1b90dbc0 100644
--- a/otk/eventdispatcher.cc
+++ b/otk/eventdispatcher.cc
@@ -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)