all repos — openbox @ 11de5db065830856f79ca0a2021f28080973710d

openbox fork - make it a bit more like ryudo

better compression, dont lose events
Dana Jansens danakj@orodu.net
commit

11de5db065830856f79ca0a2021f28080973710d

parent

7efcff07ea463bd9ae1d374119540fb8dc508489

1 files changed, 18 insertions(+), 4 deletions(-)

jump to
M src/client.ccsrc/client.cc

@@ -506,7 +506,7 @@ const otk::OBProperty *property = Openbox::instance->property();

// 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 @@ 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)) + 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 @@ 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)) + 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