X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2FWorkspace.cc;h=91bc141958865f3d706091bd1ee215c4db1840d1;hb=478771552533b63ff6c0dda136bca5e6b1701c91;hp=3ef99ea749d054ac3e1016b17e9808af9517dd0e;hpb=8794d357e67abddf9fda9db77b235e294d0ec590;p=chaz%2Fopenbox diff --git a/src/Workspace.cc b/src/Workspace.cc index 3ef99ea7..91bc1419 100644 --- a/src/Workspace.cc +++ b/src/Workspace.cc @@ -382,6 +382,7 @@ void Workspace::setName(const string& new_name) { clientmenu->setLabel(name); clientmenu->update(); + screen->saveWorkspaceNames(); } @@ -555,6 +556,31 @@ bool Workspace::smartPlacement(Rect& win, const Rect& availableArea) { } +bool Workspace::underMousePlacement(Rect &win, const Rect &availableArea) { + int x, y, rx, ry; + Window c, r; + unsigned int m; + XQueryPointer(screen->getBlackbox()->getXDisplay(), screen->getRootWindow(), + &r, &c, &rx, &ry, &x, &y, &m); + x = rx - win.width() / 2; + y = ry - win.height() / 2; + + if (x < availableArea.x()) + x = availableArea.x(); + if (y < availableArea.y()) + y = availableArea.y(); + if (x + win.width() > availableArea.x() + availableArea.width()) + x = availableArea.x() + availableArea.width() - win.width(); + if (y + win.height() > availableArea.y() + availableArea.height()) + y = availableArea.y() + availableArea.height() - win.height(); + + win.setX(x); + win.setY(y); + + return True; +} + + bool Workspace::cascadePlacement(Rect &win, const Rect &availableArea) { if ((cascade_x > static_cast(availableArea.width() / 2)) || (cascade_y > static_cast(availableArea.height() / 2))) @@ -582,6 +608,8 @@ void Workspace::placeWindow(BlackboxWindow *win) { case BScreen::ColSmartPlacement: placed = smartPlacement(new_win, availableArea); break; + case BScreen::UnderMousePlacement: + placed = underMousePlacement(new_win, availableArea); default: break; // handled below } // switch