Commit 0c78da0e authored by Vlad Zahorodnii's avatar Vlad Zahorodnii
Browse files

wayland: Make fullscreen and maximize mode not affect interactive resize

dontInteractiveMoveResize() was added to workaround kwin sending bad
configure events when double clicking mpv to make it fullscreen.

With async geometry updates fixed, dontInteractiveMoveResize() can be
finally removed.

Another reason to remove dontInteractiveMoveResize() is that it can make
kwin crash with a debug build. For example, if you enable resizing
maximized windows in breeze decoration settings and resize a maximized
window, kwin would eventually crash in
the AbstractClient::handleInteractiveMoveResize() function because neither
isInteractiveMove() nor isInteractiveResize() return true.
parent b2d401cd
Pipeline #124624 passed with stage
in 21 minutes and 20 seconds
......@@ -68,8 +68,6 @@ private Q_SLOTS:
void testResizeForVirtualKeyboardWithFullScreen();
void testDestroyMoveClient();
void testDestroyResizeClient();
void testSetFullScreenWhenMoving();
void testSetMaximizeWhenMoving();
private:
KWayland::Client::ConnectionThread *m_connection = nullptr;
......@@ -1098,57 +1096,6 @@ void MoveResizeWindowTest::testDestroyResizeClient()
QCOMPARE(workspace()->moveResizeClient(), nullptr);
}
void MoveResizeWindowTest::testSetFullScreenWhenMoving()
{
// Ensure we disable moving event when setFullScreen is triggered
using namespace KWayland::Client;
QScopedPointer<KWayland::Client::Surface> surface(Test::createSurface());
QVERIFY(!surface.isNull());
QScopedPointer<Test::XdgToplevel> shellSurface(Test::createXdgToplevelSurface(surface.data()));
QVERIFY(!shellSurface.isNull());
// let's render
auto client = Test::renderAndWaitForShown(surface.data(), QSize(500, 800), Qt::blue);
QVERIFY(client);
workspace()->slotWindowMove();
QCOMPARE(client->isInteractiveMove(), true);
client->setFullScreen(true);
QCOMPARE(client->isInteractiveMove(), false);
QCOMPARE(workspace()->moveResizeClient(), nullptr);
// Let's pretend that the client crashed.
shellSurface.reset();
surface.reset();
QVERIFY(Test::waitForWindowDestroyed(client));
}
void MoveResizeWindowTest::testSetMaximizeWhenMoving()
{
// Ensure we disable moving event when changeMaximize is triggered
using namespace KWayland::Client;
QScopedPointer<KWayland::Client::Surface> surface(Test::createSurface());
QVERIFY(!surface.isNull());
QScopedPointer<Test::XdgToplevel> shellSurface(Test::createXdgToplevelSurface(surface.data()));
QVERIFY(!shellSurface.isNull());
// let's render
auto client = Test::renderAndWaitForShown(surface.data(), QSize(500, 800), Qt::blue);
QVERIFY(client);
workspace()->slotWindowMove();
QCOMPARE(client->isInteractiveMove(), true);
client->setMaximize(true, true);
QCOMPARE(client->isInteractiveMove(), false);
QCOMPARE(workspace()->moveResizeClient(), nullptr);
// Let's pretend that the client crashed.
shellSurface.reset();
surface.reset();
QVERIFY(Test::waitForWindowDestroyed(client));
}
}
WAYLANDTEST_MAIN(KWin::MoveResizeWindowTest)
......
......@@ -1604,7 +1604,6 @@ void XdgToplevelClient::setFullScreen(bool set, bool user)
if (set) {
workspace()->raiseClient(this);
dontInteractiveMoveResize();
}
configureDecoration();
......@@ -1666,9 +1665,6 @@ void XdgToplevelClient::changeMaximize(bool horizontal, bool vertical, bool adju
}
StackingUpdatesBlocker blocker(workspace());
if (m_requestedMaximizeMode != MaximizeRestore) {
dontInteractiveMoveResize();
}
// call into decoration update borders
if (isDecorated() && decoration()->client() && !(options->borderlessMaximizedWindows() && m_requestedMaximizeMode == KWin::MaximizeFull)) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment