X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Frootwindow.cc;h=0b7de57d39e73361970570fbf6dd5c6ba15cd849;hb=00e2c5aaad4a0831fd1e0d1b1c287df4d6eaac93;hp=23361761c3f6674d347b24e32c23c0493308bf56;hpb=24924367f9486b29b8b9fd024781ccb5f9e0e276;p=chaz%2Fopenbox diff --git a/src/rootwindow.cc b/src/rootwindow.cc index 23361761..0b7de57d 100644 --- a/src/rootwindow.cc +++ b/src/rootwindow.cc @@ -7,16 +7,18 @@ #include "rootwindow.hh" #include "openbox.hh" #include "screen.hh" +#include "client.hh" #include "otk/display.hh" namespace ob { OBRootWindow::OBRootWindow(int screen) - : _info(otk::OBDisplay::screenInfo(screen)) + : OBWidget(OBWidget::Type_Root), + _info(otk::OBDisplay::screenInfo(screen)) { updateDesktopNames(); - Openbox::instance->registerHandler(_info->getRootWindow(), this); + Openbox::instance->registerHandler(_info->rootWindow(), this); } @@ -25,108 +27,7 @@ OBRootWindow::~OBRootWindow() } -void OBRootWindow::updateDesktopNames() -{ - const int numWorkspaces = 1; // XXX: change this to the number of workspaces! - - const otk::OBProperty *property = Openbox::instance->property(); - - unsigned long num = (unsigned) -1; - - if (!property->get(_info->getRootWindow(), - otk::OBProperty::net_desktop_names, - otk::OBProperty::utf8, &num, &_names)) - _names.clear(); - for (int i = 0; i < numWorkspaces; ++i) - if (i <= static_cast(_names.size())) - _names.push_back("Unnamed workspace"); -} - - -void OBRootWindow::propertyHandler(const XPropertyEvent &e) -{ - otk::OtkEventHandler::propertyHandler(e); - - 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.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(); -} - - -void OBRootWindow::clientMessageHandler(const XClientMessageEvent &e) -{ - otk::OtkEventHandler::clientMessageHandler(e); - - if (e.format != 32) return; - - //const otk::OBProperty *property = Openbox::instance->property(); - - // XXX: so many client messages to handle here! -} -void OBRootWindow::setDesktopName(int i, const std::string &name) -{ - const int numWorkspaces = 1; // XXX: change this to the number of workspaces! - assert(i >= 0); - assert(i < numWorkspaces); - - const otk::OBProperty *property = Openbox::instance->property(); - - otk::OBProperty::StringVect newnames = _names; - newnames[i] = name; - property->set(_info->getRootWindow(), otk::OBProperty::net_desktop_names, - otk::OBProperty::utf8, newnames); -} - - -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); - } -} - - -void OBRootWindow::configureRequestHandler(const XConfigureRequestEvent &e) -{ - OtkEventHandler::configureRequestHandler(e); - - // when configure requests come to the root window, just pass them on - XWindowChanges xwc; - - xwc.x = e.x; - xwc.y = e.y; - xwc.width = e.width; - xwc.height = e.height; - xwc.border_width = e.border_width; - xwc.sibling = e.above; - xwc.stack_mode = e.detail; - - XConfigureWindow(otk::OBDisplay::display, e.window, - e.value_mask, &xwc); -} - }