X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Frootwindow.cc;h=3fccc44a12418f5a3b3b2ef630fc4f758eee2522;hb=9e0ae7ecee94a0cc467d90926428fdc84f9a0339;hp=412312574d9f8905ad9119ed37be2c0b7b0708fa;hpb=dca0c9f5a308e115ec308cdc8ca7987ff4fc0479;p=chaz%2Fopenbox diff --git a/src/rootwindow.cc b/src/rootwindow.cc index 41231257..3fccc44a 100644 --- a/src/rootwindow.cc +++ b/src/rootwindow.cc @@ -6,6 +6,7 @@ #include "rootwindow.hh" #include "openbox.hh" +#include "screen.hh" #include "otk/display.hh" namespace ob { @@ -48,7 +49,18 @@ void OBRootWindow::propertyHandler(const XPropertyEvent &e) const otk::OBProperty *property = Openbox::instance->property(); - if (e.atom == property->atom(otk::OBProperty::net_desktop_names)) + // compress changes to a single property into a single change + XEvent 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) { + XPutBackEvent(otk::OBDisplay::display, &ce); + break; + } + } + + if (e.atom == property->atom(otk::OBProperty::net_desktop_names)) updateDesktopNames(); } @@ -80,4 +92,20 @@ void OBRootWindow::setDesktopName(int i, const std::string &name) } +void OBRootWindow::mapRequestHandler(const XMapRequestEvent &e) +{ +#ifdef DEBUG + printf("MapRequest for 0x%lx\n", e.window); +#endif // DEBUG + + OBClient *client = Openbox::instance->findClient(e.window); + + if (client) { + // XXX: uniconify and/or unshade the window + } else { + Openbox::instance->screen(_info->getScreenNumber())-> + manageWindow(e.window); + } +} + }