X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fscreen.cc;h=2a7711dee78f09293a2f585cce55c7b95f3cb585;hb=747c089ae1c7df345c7ad98f833e8640ab0bc851;hp=41aa1ebbc8c72427a78c3c4ba9f11484828bba40;hpb=7048f64f4580b8d43176ba2e3114c339c0013a40;p=chaz%2Fopenbox diff --git a/src/screen.cc b/src/screen.cc index 41aa1ebb..2a7711de 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -89,6 +89,7 @@ Screen::Screen(int screen) } _style.load(sconfig); */ + otk::display->renderControl(_number)->drawRoot(*_style.rootColor()); // set up notification of netwm support changeSupportedAtoms(); @@ -470,6 +471,12 @@ void Screen::manageWindow(Window window) // create the decoration frame for the client window client->frame = new Frame(client, &_style); + // register the plate for events (map req's) + // this involves removing itself from the handler list first, since it is + // auto added to the list, being a widget. we won't get any events on the + // plate except for events for the client (SubstructureRedirectMask) + openbox->clearHandler(client->frame->plate()); + openbox->registerHandler(client->frame->plate(), client); // add to the wm's map openbox->addClient(client->frame->window(), client); @@ -478,7 +485,7 @@ void Screen::manageWindow(Window window) openbox->addClient(client->frame->label(), client); openbox->addClient(client->frame->button_max(), client); openbox->addClient(client->frame->button_iconify(), client); - openbox->addClient(client->frame->button_stick(), client); + openbox->addClient(client->frame->button_alldesk(), client); openbox->addClient(client->frame->button_close(), client); openbox->addClient(client->frame->handle(), client); openbox->addClient(client->frame->grip_left(), client); @@ -520,7 +527,8 @@ void Screen::manageWindow(Window window) openbox->bindings()->fireEvent(&data); #ifdef DEBUG - printf("Managed window 0x%lx\n", window); + printf("Managed window 0x%lx frame 0x%lx\n", + window, client->frame->window()); #endif } @@ -543,7 +551,7 @@ void Screen::unmanageWindow(Client *client) openbox->removeClient(frame->label()); openbox->removeClient(frame->button_max()); openbox->removeClient(frame->button_iconify()); - openbox->removeClient(frame->button_stick()); + openbox->removeClient(frame->button_alldesk()); openbox->removeClient(frame->button_close()); openbox->removeClient(frame->handle()); openbox->removeClient(frame->grip_left()); @@ -565,6 +573,9 @@ void Screen::unmanageWindow(Client *client) // reparent the window out of the frame frame->releaseClient(); +#ifdef DEBUG + Window framewin = client->frame->window(); +#endif delete client->frame; client->frame = 0; @@ -578,7 +589,7 @@ void Screen::unmanageWindow(Client *client) client->unfocus(); #ifdef DEBUG - printf("Unmanaged window 0x%lx\n", client->window()); + printf("Unmanaged window 0x%lx frame 0x%lx\n", client->window(), framewin); #endif delete client; @@ -594,7 +605,7 @@ void Screen::lowerWindow(Client *client) assert(!_stacking.empty()); // this would be bad Client::List::iterator it = --_stacking.end(); - Client::List::const_iterator end = _stacking.begin(); + const Client::List::iterator end = _stacking.begin(); for (; it != end && (*it)->layer() < client->layer(); --it); if (*it == client) return; // already the bottom, return @@ -764,30 +775,13 @@ void Screen::mapRequestHandler(const XMapRequestEvent &e) printf("MapRequest for 0x%lx\n", e.window); #endif // DEBUG - /* - 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. - */ Client *c = openbox->findClient(e.window); - if (c) { - // send a net_active_window message - XEvent ce; - ce.xclient.type = ClientMessage; - ce.xclient.message_type = otk::Property::atoms.net_active_window; - ce.xclient.display = **otk::display; - ce.xclient.window = c->window(); - ce.xclient.format = 32; - ce.xclient.data.l[0] = 0l; - ce.xclient.data.l[1] = 0l; - ce.xclient.data.l[2] = 0l; - ce.xclient.data.l[3] = 0l; - ce.xclient.data.l[4] = 0l; - XSendEvent(**otk::display, _info->rootWindow(), false, - SubstructureRedirectMask | SubstructureNotifyMask, - &ce); +#ifdef DEBUG + printf("DEBUG: MAP REQUEST CAUGHT IN SCREEN. IGNORED.\n"); +#endif } else manageWindow(e.window); } + }