Implement borderlessMaximizedWindows for Wayland windows
Summary: Maximize code was not yet adjusted to support decorations. Code is as much as possible similar to the X11 Client implementation. BUG: 370982 Test Plan: Added auto test and run a nested KWin/Wayland with the setting enabled Reviewers: #kwin, #plasma_on_wayland Subscribers: plasma-devel, kwin Tags: #plasma_on_wayland, #kwin Differential Revision: https://phabricator.kde.org/D3508
This commit is contained in:
parent
9934f5b575
commit
f32e655031
2 changed files with 62 additions and 1 deletions
|
@ -51,6 +51,7 @@ private Q_SLOTS:
|
||||||
|
|
||||||
void testMaximizedPassedToDeco();
|
void testMaximizedPassedToDeco();
|
||||||
void testInitiallyMaximized();
|
void testInitiallyMaximized();
|
||||||
|
void testBorderlessMaximizedWindow();
|
||||||
};
|
};
|
||||||
|
|
||||||
void TestMaximized::initTestCase()
|
void TestMaximized::initTestCase()
|
||||||
|
@ -63,6 +64,8 @@ void TestMaximized::initTestCase()
|
||||||
QMetaObject::invokeMethod(kwinApp()->platform(), "setOutputCount", Qt::DirectConnection, Q_ARG(int, 2));
|
QMetaObject::invokeMethod(kwinApp()->platform(), "setOutputCount", Qt::DirectConnection, Q_ARG(int, 2));
|
||||||
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
|
QVERIFY(waylandServer()->init(s_socketName.toLocal8Bit()));
|
||||||
|
|
||||||
|
kwinApp()->setConfig(KSharedConfig::openConfig(QString(), KConfig::SimpleConfig));
|
||||||
|
|
||||||
kwinApp()->start();
|
kwinApp()->start();
|
||||||
QVERIFY(workspaceCreatedSpy.wait());
|
QVERIFY(workspaceCreatedSpy.wait());
|
||||||
QCOMPARE(screens()->count(), 2);
|
QCOMPARE(screens()->count(), 2);
|
||||||
|
@ -82,6 +85,13 @@ void TestMaximized::init()
|
||||||
void TestMaximized::cleanup()
|
void TestMaximized::cleanup()
|
||||||
{
|
{
|
||||||
Test::destroyWaylandConnection();
|
Test::destroyWaylandConnection();
|
||||||
|
|
||||||
|
// adjust config
|
||||||
|
auto group = kwinApp()->config()->group("Windows");
|
||||||
|
group.writeEntry("BorderlessMaximizedWindows", false);
|
||||||
|
group.sync();
|
||||||
|
Workspace::self()->slotReconfigure();
|
||||||
|
QCOMPARE(options->borderlessMaximizedWindows(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestMaximized::testMaximizedPassedToDeco()
|
void TestMaximized::testMaximizedPassedToDeco()
|
||||||
|
@ -161,5 +171,50 @@ void TestMaximized::testInitiallyMaximized()
|
||||||
QVERIFY(client->shellSurface()->isMaximized());
|
QVERIFY(client->shellSurface()->isMaximized());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestMaximized::testBorderlessMaximizedWindow()
|
||||||
|
{
|
||||||
|
// test case verifies that borderless maximized window works
|
||||||
|
// see BUG 370982
|
||||||
|
|
||||||
|
// adjust config
|
||||||
|
auto group = kwinApp()->config()->group("Windows");
|
||||||
|
group.writeEntry("BorderlessMaximizedWindows", true);
|
||||||
|
group.sync();
|
||||||
|
Workspace::self()->slotReconfigure();
|
||||||
|
QCOMPARE(options->borderlessMaximizedWindows(), true);
|
||||||
|
QScopedPointer<Surface> surface(Test::createSurface());
|
||||||
|
QScopedPointer<ShellSurface> shellSurface(Test::createShellSurface(surface.data()));
|
||||||
|
QScopedPointer<ServerSideDecoration> ssd(Test::waylandServerSideDecoration()->create(surface.data()));
|
||||||
|
|
||||||
|
auto client = Test::renderAndWaitForShown(surface.data(), QSize(100, 50), Qt::blue);
|
||||||
|
QVERIFY(client->isDecorated());
|
||||||
|
const QRect origGeo = client->geometry();
|
||||||
|
|
||||||
|
QSignalSpy sizeChangedSpy(shellSurface.data(), &ShellSurface::sizeChanged);
|
||||||
|
QVERIFY(sizeChangedSpy.isValid());
|
||||||
|
|
||||||
|
// go to maximized
|
||||||
|
shellSurface->setMaximized();
|
||||||
|
QVERIFY(sizeChangedSpy.wait());
|
||||||
|
QCOMPARE(shellSurface->size(), QSize(1280, 1024));
|
||||||
|
QSignalSpy geometryChangedSpy(client, &ShellClient::geometryChanged);
|
||||||
|
QVERIFY(geometryChangedSpy.isValid());
|
||||||
|
Test::render(surface.data(), shellSurface->size(), Qt::red);
|
||||||
|
QVERIFY(geometryChangedSpy.wait());
|
||||||
|
QCOMPARE(client->maximizeMode(), MaximizeMode::MaximizeFull);
|
||||||
|
QCOMPARE(client->geometry(), QRect(0, 0, 1280, 1024));
|
||||||
|
QCOMPARE(client->isDecorated(), false);
|
||||||
|
|
||||||
|
// go back to normal
|
||||||
|
shellSurface->setToplevel();
|
||||||
|
QVERIFY(sizeChangedSpy.wait());
|
||||||
|
QCOMPARE(shellSurface->size(), QSize(100, 50));
|
||||||
|
Test::render(surface.data(), QSize(100, 50), Qt::red);
|
||||||
|
QVERIFY(geometryChangedSpy.wait());
|
||||||
|
QCOMPARE(client->maximizeMode(), MaximizeMode::MaximizeRestore);
|
||||||
|
QCOMPARE(client->geometry(), origGeo);
|
||||||
|
QCOMPARE(client->isDecorated(), true);
|
||||||
|
}
|
||||||
|
|
||||||
WAYLANDTEST_MAIN(TestMaximized)
|
WAYLANDTEST_MAIN(TestMaximized)
|
||||||
#include "maximize_test.moc"
|
#include "maximize_test.moc"
|
||||||
|
|
|
@ -695,7 +695,13 @@ void ShellClient::changeMaximize(bool horizontal, bool vertical, bool adjust)
|
||||||
changeMaximizeRecursion = false;
|
changeMaximizeRecursion = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: borderless maximized windows
|
if (options->borderlessMaximizedWindows()) {
|
||||||
|
// triggers a maximize change.
|
||||||
|
// The next setNoBorder interation will exit since there's no change but the first recursion pullutes the restore geometry
|
||||||
|
changeMaximizeRecursion = true;
|
||||||
|
setNoBorder(rules()->checkNoBorder(m_maximizeMode == MaximizeFull));
|
||||||
|
changeMaximizeRecursion = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Conditional quick tiling exit points
|
// Conditional quick tiling exit points
|
||||||
const auto oldQuickTileMode = quickTileMode();
|
const auto oldQuickTileMode = quickTileMode();
|
||||||
|
|
Loading…
Reference in a new issue