From 8a662b46fa97c2686b639ed9429e1850dcb91c9c Mon Sep 17 00:00:00 2001
From: Mavridis Philippe <mavridisf@gmail.com>
Date: Tue, 1 Aug 2023 12:36:03 +0300
Subject: twin: prevent cursor appearing off-window when untiling while moving

Signed-off-by: Mavridis Philippe <mavridisf@gmail.com>
(cherry picked from commit 42f97b681bd0a2bab49875cbcae5cacef4dfa7c2)
---
 twin/geometry.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

(limited to 'twin')

diff --git a/twin/geometry.cpp b/twin/geometry.cpp
index 2dd752b02..5761f334b 100644
--- a/twin/geometry.cpp
+++ b/twin/geometry.cpp
@@ -2331,6 +2331,14 @@ bool Client::startMoveResize()
         // 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());
+
             setGeometry(activeTiledOrigGeom);
         }
     }
@@ -2415,6 +2423,7 @@ void Client::finishMoveResize( bool cancel )
                 setGeometry(cancel ? initialMoveResizeGeom
                                    : activeBorderMaximizeGeometry());
         }
+        activeTiledOrigGeom.moveTopLeft(rect().topLeft());
     }
 
     checkMaximizeGeometry();
@@ -2743,7 +2752,10 @@ void Client::setActiveBorderMaximizing( bool maximizing )
 }
 
 void Client::cancelActiveBorderMaximizing() {
+    if (!activeMaximizing) return;
     activeMaximizing = false;
+
+    // If we are in transparent mode, we need to clear out the bound we had drawn
     if (rules()->checkMoveResizeMode(options->tilingMode) == Options::Transparent) {
         clearbound();
     }
-- 
cgit v1.2.1