+ Point *p = new Point(cascade_x, cascade_y);
+ cascade_x += win.getTitleHeight();
+ cascade_y += win.getTitleHeight();
+ return p;
+}
+
+
+void Workspace::placeWindow(OpenboxWindow &win) {
+ Rect space = screen.availableArea();
+ const Size window_size(win.area().w()+screen.getBorderWidth() * 4,
+ win.area().h()+screen.getBorderWidth() * 4);
+ Point *place = NULL;
+ LinkedListIterator<OpenboxWindow> it(windowList);
+
+ switch (screen.placementPolicy()) {
+ case BScreen::BestFitPlacement:
+ place = bestFitPlacement(window_size, space);
+ break;
+ case BScreen::RowSmartPlacement:
+ place = rowSmartPlacement(window_size, space);
+ break;
+ case BScreen::ColSmartPlacement:
+ place = colSmartPlacement(window_size, space);
+ break;
+ } // switch
+
+ if (place == NULL)
+ place = cascadePlacement(win, space);
+
+ ASSERT(place != NULL);
+ if (place->x() + window_size.w() > (signed) space.x() + space.w())
+ place->setX(((signed) space.x() + space.w() - window_size.w()) / 2);
+ if (place->y() + window_size.h() > (signed) space.y() + space.h())
+ place->setY(((signed) space.y() + space.h() - window_size.h()) / 2);
+
+ win.configure(place->x(), place->y(), win.area().w(), win.area().h());
+ delete place;