X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=otk%2Feventdispatcher.cc;h=1b90dbc0d3f9a813b2bf94f19ec4400bdcdd9575;hb=9c2b06668e349901791fb9fe459cc511e460287e;hp=0560eec8609e27b21c56233e5f53dad9a96a4e15;hpb=115fedf432d73f17ade48eaa2fa12dfd333bfcaa;p=chaz%2Fopenbox 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)