diff --git a/abstract_client.cpp b/abstract_client.cpp index 54afa586eb..a5a6233239 100644 --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -274,6 +274,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 7fa59bb610..02b3e1f12e 100644 --- a/autotests/integration/lockscreen.cpp +++ b/autotests/integration/lockscreen.cpp @@ -61,6 +61,7 @@ private Q_SLOTS: void initTestCase(); void init(); void cleanup(); + void testStackingOrder(); void testPointer(); void testPointerButton(); void testPointerAxis(); @@ -221,6 +222,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;