From dadf3f3a9774e930a50d002bb9f0daf2a806ac40 Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Tue, 17 Sep 2024 16:37:48 +0200 Subject: [PATCH] window: move geometry restore to new output on electric border maximize Otherwise, unmaximizing the window will move it to a different screen than it's currently on, which is confusing BUG: 489488 --- autotests/integration/quick_tiling_test.cpp | 5 +++-- src/window.cpp | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/autotests/integration/quick_tiling_test.cpp b/autotests/integration/quick_tiling_test.cpp index 6628b68b20..6ec9df5fe9 100644 --- a/autotests/integration/quick_tiling_test.cpp +++ b/autotests/integration/quick_tiling_test.cpp @@ -340,7 +340,8 @@ void QuickTilingTest::testQuickTilingPointerMove() Test::pointerMotion(pointerPos, timestamp++); Test::pointerButtonReleased(BTN_LEFT, timestamp++); QTEST(window->requestedQuickTileMode(), "expectedMode"); - QCOMPARE(window->geometryRestore(), QRect(0, 0, 100, 50)); + const QPoint tileOutputPositon = workspace()->outputAt(pointerPos)->geometry().topLeft(); + QCOMPARE(window->geometryRestore(), QRect(tileOutputPositon, QSize(100, 50))); QVERIFY(surfaceConfigureRequestedSpy.wait()); QCOMPARE(surfaceConfigureRequestedSpy.count(), 2); QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).toSize(), tileSize); @@ -376,7 +377,7 @@ void QuickTilingTest::testQuickTilingPointerMove() Test::pointerMotion(pointerPos, timestamp++); // tile the window again Test::pointerButtonReleased(BTN_LEFT, timestamp++); QTEST(window->requestedQuickTileMode(), "expectedMode"); - QCOMPARE(window->geometryRestore(), QRect(0, 0, 100, 50)); + QCOMPARE(window->geometryRestore(), QRect(tileOutputPositon, QSize(100, 50))); QVERIFY(surfaceConfigureRequestedSpy.wait()); QCOMPARE(surfaceConfigureRequestedSpy.count(), 4); QCOMPARE(toplevelConfigureRequestedSpy.last().at(0).toSize(), tileSize); diff --git a/src/window.cpp b/src/window.cpp index 4a7b344a05..8cac1add4d 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -1251,6 +1251,9 @@ void Window::finishInteractiveMoveResize(bool cancel) } } else if (moveResizeOutput() != interactiveMoveResizeStartOutput()) { sendToOutput(moveResizeOutput()); // checks rule validity + const QRectF oldScreenArea = workspace()->clientArea(MaximizeArea, this, interactiveMoveResizeStartOutput()); + const QRectF screenArea = workspace()->clientArea(MaximizeArea, this, moveResizeOutput()); + m_electricGeometryRestore = moveToArea(m_electricGeometryRestore, oldScreenArea, screenArea); if (isRequestedFullScreen() || requestedMaximizeMode() != MaximizeRestore) { checkWorkspacePosition(); }