summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrbell <riley.bell@vfemail.net>2025-04-14 09:28:48 -0700
committerMichele Calgaro <michele.calgaro@yahoo.it>2025-05-13 17:15:15 +0900
commit37605209af6150bda9a68f311b3535edf39ff122 (patch)
tree32ad53b9b1d2f5b2312794598a01534c0f49a9a2
parent607bb2598d8b02f2c62d5a327ee13e543713f512 (diff)
downloadtdebase-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.h4
-rw-r--r--twin/geometry.cpp30
-rw-r--r--twin/workspace.cpp26
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);
}