X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspace.cc;h=06bd9d66c9a5ede34ee399dbb5a70341c9d40031;hb=e75d3560a621976eee5413d3583c14c294fbeab6;hp=41eb3ef0a37dc1ab8f950b090556b7ed1f20b006;hpb=9cd9d92bb1d66db9329bf5cd6e42e8b0096945e6;p=chaz%2Fopenbox diff --git a/src/Workspace.cc b/src/Workspace.cc index 41eb3ef0..06bd9d66 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -538,22 +538,63 @@ Point *const Workspace::cascadePlacement(const OpenboxWindow *const win){ void Workspace::placeWindow(OpenboxWindow *win) { ASSERT(win != NULL); + // the following code is temporary and will be taken care of by Screen in the + // future (with the NETWM 'strut') + Rect space(0, 0, screen.size().w(), screen.size().h()); + +#ifdef SLIT + Slit *slit = screen.getSlit(); + int remove; // 0 - top/2 - right/2 - bottom/3 - left + if ((slit->direction() == Slit::Horizontal && + (slit->placement() == Slit::TopLeft || + slit->placement() == Slit::TopRight)) || + slit->placement() == Slit::TopCenter) + // exclude top + space.setY(slit->area().h() + screen.getBorderWidth() * 2); + else if ((slit->direction() == Slit::Vertical && + (slit->placement() == Slit::TopRight || + slit->placement() == Slit::BottomRight)) || + slit->placement() == Slit::CenterRight) + // exclude right + space.setW(screen.size().w() - + (slit->area().w() + screen.getBorderWidth() * 2)); + else if ((slit->direction() == Slit::Horizontal && + (slit->placement() == Slit::BottomLeft || + slit->placement() == Slit::BottomRight)) || + slit->placement() == Slit::TopCenter) + // exclude bottom + space.setH(screen.size().h() - + (slit->area().h() + screen.getBorderWidth() * 2)); + else// if ((slit->direction() == Slit::Vertical && + // (slit->placement() == Slit::TopLeft || + // slit->placement() == Slit::BottomLeft)) || + // slit->placement() == Slit::CenterLeft) + // exclude left + space.setX(slit->area().w() + screen.getBorderWidth() * 2); +#endif + + Toolbar *toolbar = screen.getToolbar(); + int tbarh = screen.hideToolbar() ? 0 : + toolbar->getExposedHeight() + screen.getBorderWidth() * 2; + switch (toolbar->placement()) { + case Toolbar::TopLeft: + case Toolbar::TopCenter: + case Toolbar::TopRight: + if (tbarh > space.y()) + space.setY(toolbar->getExposedHeight()); + break; + case Toolbar::BottomLeft: + case Toolbar::BottomCenter: + case Toolbar::BottomRight: + if (screen.size().h() - tbarh < space.h()) + space.setH(screen.size().h() - tbarh); + break; + default: + ASSERT(false); // unhandled placement + } + const int win_w = win->size().w() + (screen.getBorderWidth() * 4), win_h = win->size().h() + (screen.getBorderWidth() * 4), -#ifdef SLIT - slit_x = screen.getSlit()->area().x() - screen.getBorderWidth(), - slit_y = screen.getSlit()->area().y() - screen.getBorderWidth(), - slit_w = screen.getSlit()->area().w() + - (screen.getBorderWidth() * 4), - slit_h = screen.getSlit()->area().h() + - (screen.getBorderWidth() * 4), -#endif // SLIT - toolbar_x = screen.getToolbar()->getX() - screen.getBorderWidth(), - toolbar_y = screen.getToolbar()->getY() - screen.getBorderWidth(), - toolbar_w = screen.getToolbar()->getWidth() + - (screen.getBorderWidth() * 4), - toolbar_h = screen.getToolbar()->getHeight() + - (screen.getBorderWidth() * 4), start_pos = 0, change_y = ((screen.colPlacementDirection() == BScreen::TopBottom) ? 1 : -1), @@ -563,10 +604,6 @@ void Workspace::placeWindow(OpenboxWindow *win) { LinkedListIterator it(windowList); - Rect space(0, 0, - screen.size().w(), - screen.size().h() - ); Size window_size(win->size().w()+screen.getBorderWidth() * 4, win->size().h()+screen.getBorderWidth() * 4); Point *place = NULL;