all repos — openbox @ 786834abea24b8ebc233d894e6ffd40a38da0170

openbox fork - make it a bit more like ryudo

compress property changes into a single change
Dana Jansens danakj@orodu.net
commit

786834abea24b8ebc233d894e6ffd40a38da0170

parent

dca0c9f5a308e115ec308cdc8ca7987ff4fc0479

1 files changed, 23 insertions(+), 5 deletions(-)

jump to
M src/client.ccsrc/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]); }