X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fscreen.cc;h=40f143a13539fe694610beb52733fa67c27bb734;hb=e2069b5792a80ba8ccfd03c9d1bdd5e364dbee10;hp=f86ea6b075ea440441c34b00e2f20c57316cf1c9;hpb=359218b6efc4dc57f8db12a6440a8a6c9a99e835;p=chaz%2Fopenbox diff --git a/src/screen.cc b/src/screen.cc index f86ea6b0..40f143a1 100644 --- a/src/screen.cc +++ b/src/screen.cc @@ -134,7 +134,7 @@ Screen::Screen(int screen) openbox->registerHandler(_info->rootWindow(), this); // call the python Startup callbacks - EventData data(_number, 0, EventAction::Shutdown, 0); + EventData data(_number, 0, EventAction::Startup, 0); openbox->bindings()->fireEvent(&data); } @@ -208,6 +208,7 @@ void Screen::manageExisting() void Screen::updateStrut() { + otk::Strut old = _strut; _strut.left = _strut.right = _strut.top = _strut.bottom = 0; Client::List::iterator it, end = clients.end(); @@ -219,6 +220,12 @@ void Screen::updateStrut() _strut.bottom = std::max(_strut.bottom, s.bottom); } calcArea(); + + if (!(old == _strut)) { + // the strut has changed, adjust all the maximized windows + for (it = clients.begin(); it != end; ++it) + (*it)->remaximize(); + } } @@ -512,8 +519,7 @@ void Screen::manageWindow(Window window) // reparent the client to the frame client->frame->grabClient(); - if (!(openbox->state() == Openbox::State_Starting || - client->positionRequested())) { + if (openbox->state() != Openbox::State_Starting) { // position the window intelligenty .. hopefully :) // call the python PLACEWINDOW binding EventData data(_number, client, EventAction::PlaceWindow, 0); @@ -536,7 +542,7 @@ void Screen::manageWindow(Window window) // add to the screen's list clients.push_back(client); // once the client is in the list, update our strut to include the new - // client's + // client's (it is good that this happens after window placement!) updateStrut(); // this puts into the stacking order, then raises it _stacking.push_back(client); @@ -608,6 +614,10 @@ void Screen::unmanageWindow(Client *client) // remove from the screen's list clients.remove(client); + // once the client is out of the list, update our strut to remove it's + // influence + updateStrut(); + // unfocus the client (calls the focus callbacks) client->unfocus();