From d6b53fca1fb43fe7299508d612b8a87cfb9546af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9ven=20Car?= Date: Wed, 8 Jul 2020 16:07:14 +0200 Subject: [PATCH] Wayland: make logout greeter a Role::Panel PlasmaSurface BUG: 423953 --- logout-greeter/greeter.cpp | 3 ++- logout-greeter/shutdowndlg.cpp | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/logout-greeter/greeter.cpp b/logout-greeter/greeter.cpp index 49fbd3508..7c5b8d2b7 100644 --- a/logout-greeter/greeter.cpp +++ b/logout-greeter/greeter.cpp @@ -80,7 +80,8 @@ void Greeter::setupWaylandIntegration() void Greeter::init() { setupWaylandIntegration(); - foreach (QScreen *screen, qApp->screens()) { + const auto screens = qApp->screens(); + for (QScreen *screen: screens) { adoptScreen(screen); } connect(qApp, &QGuiApplication::screenAdded, this, &Greeter::adoptScreen); diff --git a/logout-greeter/shutdowndlg.cpp b/logout-greeter/shutdowndlg.cpp index 9623faf64..c10f21e3d 100644 --- a/logout-greeter/shutdowndlg.cpp +++ b/logout-greeter/shutdowndlg.cpp @@ -148,7 +148,6 @@ KSMShutdownDlg::KSMShutdownDlg(QWindow* parent, //TODO KF6 remove. Unused context->setContextProperty(QStringLiteral("choose"), false); - // TODO KF6 remove, used to call KDisplayManager::bootOptions QStringList rebootOptions; int def = 0; @@ -211,6 +210,7 @@ void KSMShutdownDlg::init() (backgroundColor.value() > 128 ? 1.6 : 0.3), 1.7); KQuickAddons::QuickViewSharedEngine::showFullScreen(); + setFlag(Qt::FramelessWindowHint); requestActivate(); KWindowSystem::setState(winId(), NET::SkipTaskbar|NET::SkipPager); @@ -253,18 +253,22 @@ void KSMShutdownDlg::setupWaylandIntegration() // already setup return; } - using namespace KWayland::Client; if (!m_waylandPlasmaShell) { return; } + using namespace KWayland::Client; Surface *s = Surface::fromWindow(this); if (!s) { return; } + m_shellSurface = m_waylandPlasmaShell->createSurface(s, this); - // TODO: set a proper window type to indicate to KWin that this is the logout dialog - // maybe we need a dedicated type for it? + // Use Role::Panel to make it go above all other windows + // see allso KSplash splashwindow.cpp m_shellSurface->setPosition(geometry().topLeft()); + m_shellSurface->setRole(PlasmaShellSurface::Role::Panel); + m_shellSurface->setPanelTakesFocus(true); + m_shellSurface->setPanelBehavior(PlasmaShellSurface::PanelBehavior::WindowsGoBelow); } void KSMShutdownDlg::slotLogout()