]> Dogcows Code - chaz/openbox/commitdiff
compress property changes into a single change
authorDana Jansens <danakj@orodu.net>
Mon, 2 Dec 2002 22:19:07 +0000 (22:19 +0000)
committerDana Jansens <danakj@orodu.net>
Mon, 2 Dec 2002 22:19:07 +0000 (22:19 +0000)
src/client.cc

index 34fcf6fa24d929ee3eb0922da6044c8b2811b9c7..7dd63b2a3f554fd43cc0ecaa665bbdd6616b7e77 100644 (file)
@@ -656,12 +656,30 @@ void OBClient::clientMessageHandler(const XClientMessageEvent &e)
 
   const otk::OBProperty *property = Openbox::instance->property();
   
-  if (e.message_type == property->atom(otk::OBProperty::wm_change_state))
-    setWMState(e.data.l[0]);
-  else if (e.message_type ==
-             property->atom(otk::OBProperty::net_wm_desktop))
-    setDesktop(e.data.l[0]);
+  if (e.message_type == property->atom(otk::OBProperty::wm_change_state)) {
+    // compress changes into a single change
+    bool compress = false;
+    XEvent ce;
+    while (XCheckTypedEvent(otk::OBDisplay::display, e.message_type, &ce))
+      compress = true;
+    if (compress)
+      setWMState(ce.xclientmessage.data.l[0]); // use the found event
+    else
+      setWMState(e.data.l[0]); // use the original event
+  } else if (e.message_type ==
+             property->atom(otk::OBProperty::net_wm_desktop)) {
+    // compress changes into a single change 
+    bool compress = false;
+    XEvent ce;
+    while (XCheckTypedEvent(otk::OBDisplay::display, e.message_type, &ce))
+      compress = true;
+    if (compress)
+      setDesktop(e.data.l[0]); // use the found event
+    else
+      setDesktop(e.data.l[0]); // use the original event
+  }
   else if (e.message_type == property->atom(otk::OBProperty::net_wm_state))
+    // can't compress these
     setState((StateAction)e.data.l[0], e.data.l[1], e.data.l[2]);
 }
 
This page took 0.025077 seconds and 4 git commands to generate.