X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Frootwindow.cc;h=0b7de57d39e73361970570fbf6dd5c6ba15cd849;hb=00e2c5aaad4a0831fd1e0d1b1c287df4d6eaac93;hp=364f614471d186a562544b7cc9200c677860a490;hpb=68194ce957db36ead19a39fdc7636a220befafe9;p=chaz%2Fopenbox diff --git a/src/rootwindow.cc b/src/rootwindow.cc index 364f6144..0b7de57d 100644 --- a/src/rootwindow.cc +++ b/src/rootwindow.cc @@ -7,6 +7,7 @@ #include "rootwindow.hh" #include "openbox.hh" #include "screen.hh" +#include "client.hh" #include "otk/display.hh" namespace ob { @@ -26,86 +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->rootWindow(), - 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->rootWindow(), 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->screen())->manageWindow(e.window); - } -} }