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.
master
Vlad Zahorodnii 3 years ago
parent b2d401cddb
commit 0c78da0e3a

@ -68,8 +68,6 @@ private Q_SLOTS:
void testResizeForVirtualKeyboardWithFullScreen(); void testResizeForVirtualKeyboardWithFullScreen();
void testDestroyMoveClient(); void testDestroyMoveClient();
void testDestroyResizeClient(); void testDestroyResizeClient();
void testSetFullScreenWhenMoving();
void testSetMaximizeWhenMoving();
private: private:
KWayland::Client::ConnectionThread *m_connection = nullptr; KWayland::Client::ConnectionThread *m_connection = nullptr;
@ -1098,57 +1096,6 @@ void MoveResizeWindowTest::testDestroyResizeClient()
QCOMPARE(workspace()->moveResizeClient(), nullptr); 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) WAYLANDTEST_MAIN(KWin::MoveResizeWindowTest)

@ -1604,7 +1604,6 @@ void XdgToplevelClient::setFullScreen(bool set, bool user)
if (set) { if (set) {
workspace()->raiseClient(this); workspace()->raiseClient(this);
dontInteractiveMoveResize();
} }
configureDecoration(); configureDecoration();
@ -1666,9 +1665,6 @@ void XdgToplevelClient::changeMaximize(bool horizontal, bool vertical, bool adju
} }
StackingUpdatesBlocker blocker(workspace()); StackingUpdatesBlocker blocker(workspace());
if (m_requestedMaximizeMode != MaximizeRestore) {
dontInteractiveMoveResize();
}
// call into decoration update borders // call into decoration update borders
if (isDecorated() && decoration()->client() && !(options->borderlessMaximizedWindows() && m_requestedMaximizeMode == KWin::MaximizeFull)) { if (isDecorated() && decoration()->client() && !(options->borderlessMaximizedWindows() && m_requestedMaximizeMode == KWin::MaximizeFull)) {

Loading…
Cancel
Save