compress property changes into a single change
Dana Jansens danakj@orodu.net
1 files changed,
23 insertions(+),
5 deletions(-)
jump to
M
src/client.cc
→
src/client.cc
@@ -656,12 +656,30 @@ if (e.format != 32) return;
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]); }