From 11de5db065830856f79ca0a2021f28080973710d Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Mon, 2 Dec 2002 22:36:43 +0000 Subject: [PATCH] better compression, dont lose events --- src/client.cc | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/client.cc b/src/client.cc index a92c1796..80bab9db 100644 --- a/src/client.cc +++ b/src/client.cc @@ -506,7 +506,7 @@ void OBClient::propertyHandler(const XPropertyEvent &e) // compress changes to a single property into a single change XEvent ce; - while (XCheckTypedEvent(otk::OBDisplay::display, e.message_type, &ce)) { + while (XCheckTypedEvent(otk::OBDisplay::display, e.type, &ce)) { // XXX: it would be nice to compress ALL changes to a property, not just // changes in a row without other props between. if (ce.xproperty.atom != e.atom) { @@ -671,10 +671,17 @@ void OBClient::clientMessageHandler(const XClientMessageEvent &e) // compress changes into a single change bool compress = false; XEvent ce; - while (XCheckTypedEvent(otk::OBDisplay::display, e.message_type, &ce)) + while (XCheckTypedEvent(otk::OBDisplay::display, e.type, &ce)) { + // XXX: it would be nice to compress ALL messages of a type, not just + // messages in a row without other message types between. + if (ce.xclient.message_type != e.message_type) { + XPutBackEvent(otk::OBDisplay::display, &ce); + break; + } compress = true; + } if (compress) - setWMState(ce.xclientmessage.data.l[0]); // use the found event + setWMState(ce.xclient.data.l[0]); // use the found event else setWMState(e.data.l[0]); // use the original event } else if (e.message_type == @@ -682,8 +689,15 @@ void OBClient::clientMessageHandler(const XClientMessageEvent &e) // compress changes into a single change bool compress = false; XEvent ce; - while (XCheckTypedEvent(otk::OBDisplay::display, e.message_type, &ce)) + while (XCheckTypedEvent(otk::OBDisplay::display, e.type, &ce)) { + // XXX: it would be nice to compress ALL messages of a type, not just + // messages in a row without other message types between. + if (ce.xclient.message_type != e.message_type) { + XPutBackEvent(otk::OBDisplay::display, &ce); + break; + } compress = true; + } if (compress) setDesktop(e.data.l[0]); // use the found event else -- 2.39.2