diff options
author | rbell <riley.bell@vfemail.net> | 2025-04-14 09:28:48 -0700 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-05-13 17:15:15 +0900 |
commit | 37605209af6150bda9a68f311b3535edf39ff122 (patch) | |
tree | 32ad53b9b1d2f5b2312794598a01534c0f49a9a2 | |
parent | 607bb2598d8b02f2c62d5a327ee13e543713f512 (diff) | |
download | tdebase-37605209af6150bda9a68f311b3535edf39ff122.tar.gz tdebase-37605209af6150bda9a68f311b3535edf39ff122.zip |
twin: Use screen geometry when active borders are in tiling mode
Signed-off-by: rbell <riley.bell@vfemail.net>
-rw-r--r-- | twin/client.h | 4 | ||||
-rw-r--r-- | twin/geometry.cpp | 30 | ||||
-rw-r--r-- | twin/workspace.cpp | 26 |
3 files changed, 36 insertions, 24 deletions
diff --git a/twin/client.h b/twin/client.h index a59b20acd..dbe6f65c2 100644 --- a/twin/client.h +++ b/twin/client.h @@ -233,8 +233,10 @@ class Client : public TQObject, public KDecorationDefines void resizeWithChecks( const TQSize& s, ForceGeometry_t force = NormalGeometrySet ); void keepInArea( TQRect area, bool partial = false ); void setActiveBorderMode( ActiveMaximizingMode mode ); + void setActiveBorderPos( TQPoint pos ); void setActiveBorder( ActiveBorder border); ActiveMaximizingMode activeBorderMode() const; + TQPoint activeBorderPos() const; ActiveBorder activeBorder() const; void setActiveBorderMaximizing(bool maximizing); void cancelActiveBorderMaximizing(); @@ -614,8 +616,8 @@ class Client : public TQObject, public KDecorationDefines bool activeMaximizing; bool activeTiled; - TQRect activeTiledOrigGeom; ActiveMaximizingMode activeMode; + TQPoint activePos; ActiveBorder currentActiveBorder; friend bool performTransiencyCheck(); diff --git a/twin/geometry.cpp b/twin/geometry.cpp index 657c6a1ed..6c7f240af 100644 --- a/twin/geometry.cpp +++ b/twin/geometry.cpp @@ -2328,26 +2328,19 @@ bool Client::startMoveResize() moveResizeMode = true; initialMoveResizeGeom = geometry(); - if (activeTiled) + if ( maximizeMode() != MaximizeRestore ) { - // Restore original geometry - activeTiled = false; if (options->resetMaximizedWindowGeometry() && isMove()) { /* Original geometry might be smaller than the tiled one, so the * mouse pointer might appear off-window when untiling. * Here we center the window horizontally under the mouse pointer. * This should work with most window decorations. */ - activeTiledOrigGeom.moveLeft(TQCursor::pos().x() - (activeTiledOrigGeom.width() / 2)); - moveOffset.setX(TQCursor::pos().x() - activeTiledOrigGeom.x()); + geom_restore.moveLeft(TQCursor::pos().x() - (geom_restore.width() / 2)); + moveOffset.setX(TQCursor::pos().x() - geom_restore.x()); - setGeometry(activeTiledOrigGeom); - } - } + setGeometry(geom_restore); - if ( maximizeMode() != MaximizeRestore ) - { - if (options->resetMaximizedWindowGeometry() && isMove()) { maximize(MaximizeRestore); } else { @@ -2411,7 +2404,7 @@ void Client::finishMoveResize( bool cancel ) kdDebug() <<"finishing moveresize in active mode, cancel is " << cancel << endl; activeMaximizing = false; activeTiled = true; - activeTiledOrigGeom = initialMoveResizeGeom; + geom_restore = initialMoveResizeGeom; switch (activeMode) { case ActiveMaximizeMode: { @@ -2425,7 +2418,6 @@ void Client::finishMoveResize( bool cancel ) setGeometry(cancel ? initialMoveResizeGeom : activeBorderMaximizeGeometry()); } - activeTiledOrigGeom.moveTopLeft(rect().topLeft()); } checkMaximizeGeometry(); @@ -2726,6 +2718,16 @@ ActiveMaximizingMode Client::activeBorderMode() const return activeMode; } +void Client::setActiveBorderPos( TQPoint pos ) +{ + activePos = pos; +} + +TQPoint Client::activeBorderPos() const +{ + return activePos; +} + void Client::setActiveBorder(ActiveBorder border) { currentActiveBorder = border; } @@ -2766,7 +2768,7 @@ void Client::cancelActiveBorderMaximizing() { TQRect Client::activeBorderMaximizeGeometry() { TQRect ret; - TQRect max = workspace()->clientArea(MaximizeArea, TQCursor::pos(), workspace()->currentDesktop()); + TQRect max = workspace()->clientArea(MaximizeArea, activePos, workspace()->currentDesktop()); switch (activeBorderMode()) { case ActiveMaximizeMode: diff --git a/twin/workspace.cpp b/twin/workspace.cpp index 9b1b45ce3..8e41be550 100644 --- a/twin/workspace.cpp +++ b/twin/workspace.cpp @@ -2542,15 +2542,21 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now) int distance_reset = activation_distance + 10; // Leave active maximizing mode when window moved away - if (active_current_border != ActiveNone && - (pos.x() > activeLeft + distance_reset) && - (pos.x() < activeRight - distance_reset) && - (pos.y() > activeTop + distance_reset) && - (pos.y() < activeBottom - distance_reset)) - { - if (movingClient && - (options->activeBorders() == Options::ActiveTileMaximize || - options->activeBorders() == Options::ActiveTileOnly)) + if (movingClient && + (options->activeBorders() == Options::ActiveTileMaximize || + options->activeBorders() == Options::ActiveTileOnly)) + { + TQRect r = TQApplication::desktop()->screenGeometry(pos); + activeTop = r.top(); + activeBottom = r.bottom(); + activeLeft = r.left(); + activeRight = r.right(); + + if (active_current_border != ActiveNone && + (pos.x() > activeLeft + distance_reset) && + (pos.x() < activeRight - distance_reset) && + (pos.y() > activeTop + distance_reset) && + (pos.y() < activeBottom - distance_reset)) { movingClient->cancelActiveBorderMaximizing(); return; @@ -2661,6 +2667,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now) { if (!movingClient->isResizable()) return; movingClient->setActiveBorderMode(ActiveMaximizeMode); + movingClient->setActiveBorderPos(pos); movingClient->setActiveBorder(ActiveNone); movingClient->setActiveBorderMaximizing(true); } @@ -2671,6 +2678,7 @@ void Workspace::checkActiveBorder(const TQPoint &pos, Time now) { if (!movingClient->isResizable()) return; movingClient->setActiveBorderMode(ActiveTilingMode); + movingClient->setActiveBorderPos(pos); movingClient->setActiveBorder(border); movingClient->setActiveBorderMaximizing(true); } |