]> Dogcows Code - chaz/openbox/blobdiff - src/Workspace.cc
watch for case where not all screens get managed!
[chaz/openbox] / src / Workspace.cc
index d9644252bffd17e0ddb56d8a6db882fe65d61226..a7887945470223faa69d5b12ce458816fd2f4332 100644 (file)
@@ -615,8 +615,12 @@ bool Workspace::smartPlacement(Rect& win) {
   for (; wit != end; ++wit) {
     const BlackboxWindow* const curr = *wit;
 
-    if (curr->isShaded() && screen->getPlaceIgnoreShaded()) continue;
-    if (curr->isMaximizedFull() && screen->getPlaceIgnoreMaximized()) continue;
+    // watch for shaded windows and full-maxed windows
+    if (curr->isShaded()) {
+      if (screen->getPlaceIgnoreShaded()) continue;
+    } else if (curr->isMaximizedFull()) {
+      if (screen->getPlaceIgnoreMaximized()) continue;
+    }
 
     tmp.setRect(curr->frameRect().x(), curr->frameRect().y(),
                 curr->frameRect().width() + screen->getBorderWidth(),
@@ -781,8 +785,10 @@ void Workspace::placeWindow(BlackboxWindow *win) {
     cascadePlacement(new_win, (win->getTitleHeight() +
                                screen->getBorderWidth() * 2));
 
-  // make sure the placement was valid
-  assert(screen->availableArea().contains(new_win));
+  if (new_win.right() > screen->availableArea().right())
+    new_win.setX(screen->availableArea().left());
+  if (new_win.bottom() > screen->availableArea().bottom())
+    new_win.setY(screen->availableArea().top());
 
   win->configure(new_win.x(), new_win.y(), new_win.width(), new_win.height());
 }
This page took 0.023738 seconds and 4 git commands to generate.