X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Frootwindow.cc;h=78017dd37ad4d92087844e8ff48615753348f132;hb=cc39863363f6c424a1d5f3790ef182b52b69a53e;hp=a028ac81183b8ea8904e64d4a6ca3199e0973ba6;hpb=bdc491ccfe71ce29a5a1ea813da4b1c66e2fa330;p=chaz%2Fopenbox diff --git a/src/rootwindow.cc b/src/rootwindow.cc index a028ac81..78017dd3 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); } @@ -33,13 +35,12 @@ void OBRootWindow::updateDesktopNames() unsigned long num = (unsigned) -1; - if (!property->get(_info->getRootWindow(), + 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"); + while ((signed)_names.size() < numWorkspaces) + _names.push_back("Unnamed"); } @@ -73,10 +74,18 @@ void OBRootWindow::clientMessageHandler(const XClientMessageEvent &e) //const otk::OBProperty *property = Openbox::instance->property(); - // XXX: so many client messages to handle here! + // XXX: so many client messages to handle here! ..or not.. they go to clients } +void OBRootWindow::setDesktopNames(const otk::OBProperty::StringVect &names) +{ + _names = names; + const otk::OBProperty *property = Openbox::instance->property(); + property->set(_info->rootWindow(), otk::OBProperty::net_desktop_names, + otk::OBProperty::utf8, names); +} + void OBRootWindow::setDesktopName(int i, const std::string &name) { const int numWorkspaces = 1; // XXX: change this to the number of workspaces! @@ -87,50 +96,33 @@ void OBRootWindow::setDesktopName(int i, const std::string &name) otk::OBProperty::StringVect newnames = _names; newnames[i] = name; - property->set(_info->getRootWindow(), otk::OBProperty::net_desktop_names, + property->set(_info->rootWindow(), otk::OBProperty::net_desktop_names, otk::OBProperty::utf8, newnames); } void OBRootWindow::mapRequestHandler(const XMapRequestEvent &e) { + otk::OtkEventHandler::mapRequestHandler(e); + #ifdef DEBUG printf("MapRequest for 0x%lx\n", e.window); #endif // DEBUG - OBClient *client = Openbox::instance->findClient(e.window); - - printf("Client: %lx\n", client); - - if (client) { - printf("found client\n"); - // XXX: uniconify and/or unshade the window - } else { - Openbox::instance->screen(_info->getScreenNumber())-> - manageWindow(e.window); - } -} - - -#include -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); + /* + MapRequest events come here even after the window exists instead of going + right to the client window, because of how they are sent and their struct + layout. + */ + OBClient *c = Openbox::instance->findClient(e.window); + + if (c) { + if (c->shaded()) + c->shade(false); + // XXX: uniconify the window + c->focus(); + } else + Openbox::instance->screen(_info->screen())->manageWindow(e.window); } - }