]> Dogcows Code - chaz/openbox/commitdiff
better compression, dont lose events
authorDana Jansens <danakj@orodu.net>
Mon, 2 Dec 2002 22:36:43 +0000 (22:36 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 2 Dec 2002 22:36:43 +0000 (22:36 +0000)
src/client.cc

index a92c1796e9f4699733eb3cbac01f444f66be6fc3..80bab9db978fc06425a0d3a93e27ee3c1ac9b051 100644 (file)
@@ -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
This page took 0.024832 seconds and 4 git commands to generate.