- rectList::const_iterator siter;
- spaces.push_back(space); //initially the entire screen is free
- it.reset();
-
- //Find Free Spaces
- for (OpenboxWindow *cur=it.current(); cur!=NULL; it++, cur=it.current())
- spaces = calcSpace(cur->area().Inflate(screen.getBorderWidth() * 4),
- spaces);
- //Sort spaces by user preference
- if(screen.colPlacementDirection() == BScreen::TopBottom)
- if(screen.rowPlacementDirection() == BScreen::LeftRight)
- sort(spaces.begin(),spaces.end(),colLRTB);
- else
- sort(spaces.begin(),spaces.end(),colRLTB);
- else
- if(screen.rowPlacementDirection() == BScreen::LeftRight)
- sort(spaces.begin(),spaces.end(),colLRBT);
- else
- sort(spaces.begin(),spaces.end(),colRLBT);
- fprintf(stderr,"Spaces after sorting\n");
- for (siter=spaces.begin(); siter!=spaces.end(); ++siter)
- fprintf(stderr,"space(%d,%d)(%d,%d)\n",siter->x(),siter->y(),
- siter->x()+siter->w(),siter->y()+siter->h());
- //Find first space that fits the window
- best = NULL;
- for (siter=spaces.begin(); siter!=spaces.end(); ++siter)
- if ((siter->w() >= win_size.w()) && (siter->h() >= win_size.h())) {
- best = siter;
- break;
- }
+bool Workspace::cascadePlacement(Rect &win, const Rect &availableArea) {
+ if ((cascade_x > static_cast<signed>(availableArea.width() / 2)) ||
+ (cascade_y > static_cast<signed>(availableArea.height() / 2)))
+ cascade_x = cascade_y = 32;