diff --git a/abstract_client.cpp b/abstract_client.cpp index ca6c422e61..48918e79b6 100644 --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -275,6 +275,8 @@ Layer AbstractClient::belongsToLayer() const // Since the desktop is also activated, nothing should be in the ActiveLayer, though if (isInternal()) return UnmanagedLayer; + if (isLockScreen()) + return UnmanagedLayer; if (isDesktop()) return workspace()->showingDesktop() ? AboveLayer : DesktopLayer; if (isSplash()) // no damn annoying splashscreens diff --git a/autotests/integration/lockscreen.cpp b/autotests/integration/lockscreen.cpp index e258540075..82cac091fe 100644 --- a/autotests/integration/lockscreen.cpp +++ b/autotests/integration/lockscreen.cpp @@ -62,6 +62,7 @@ private Q_SLOTS: void initTestCase(); void init(); void cleanup(); + void testStackingOrder(); void testPointer(); void testPointerButton(); void testPointerAxis(); @@ -223,6 +224,24 @@ void LockScreenTest::cleanup() Test::destroyWaylandConnection(); } +void LockScreenTest::testStackingOrder() +{ + // This test verifies that the lockscreen greeter is placed above other windows. + + QSignalSpy clientAddedSpy(waylandServer(), &WaylandServer::shellClientAdded); + QVERIFY(clientAddedSpy.isValid()); + + LOCK + QVERIFY(clientAddedSpy.wait()); + + AbstractClient *client = clientAddedSpy.first().first().value(); + QVERIFY(client); + QVERIFY(client->isLockScreen()); + QCOMPARE(client->layer(), UnmanagedLayer); + + UNLOCK +} + void LockScreenTest::testPointer() { using namespace KWayland::Client;