diff --git a/abstractlocker.cpp b/abstractlocker.cpp --- a/abstractlocker.cpp +++ b/abstractlocker.cpp @@ -38,7 +38,8 @@ : QRasterWindow() , m_lock(lock) { - setFlags(Qt::X11BypassWindowManagerHint); + setFlags(Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint); + setProperty("org_kde_ksld_emergency", true); } BackgroundWindow::~BackgroundWindow() = default; diff --git a/waylandlocker.h b/waylandlocker.h --- a/waylandlocker.h +++ b/waylandlocker.h @@ -49,6 +49,7 @@ private: void stayOnTop() override; + void updateGeometryOfBackground(); }; diff --git a/waylandlocker.cpp b/waylandlocker.cpp --- a/waylandlocker.cpp +++ b/waylandlocker.cpp @@ -19,6 +19,10 @@ *********************************************************************/ #include "waylandlocker.h" + +#include +#include + #include #include @@ -32,12 +36,37 @@ for (auto s : seats) { connect(s, &KWayland::Server::SeatInterface::timestampChanged, this, &WaylandLocker::userActivity); } + if (m_background) { + updateGeometryOfBackground(); + const auto screens = qApp->screens(); + for (auto s : screens) { + connect(s, &QScreen::geometryChanged, this, &WaylandLocker::updateGeometryOfBackground); + } + connect(qApp, &QGuiApplication::screenAdded, this, + [this] (QScreen *s) { + connect(s, &QScreen::geometryChanged, this, &WaylandLocker::updateGeometryOfBackground); + updateGeometryOfBackground(); + } + ); + connect(qApp, &QGuiApplication::screenRemoved, this, &WaylandLocker::updateGeometryOfBackground); + } } WaylandLocker::~WaylandLocker() { } +void WaylandLocker::updateGeometryOfBackground() +{ + QRect combined; + const auto screens = qApp->screens(); + for (auto s : screens) { + combined = combined.united(s->geometry()); + } + m_background->setGeometry(combined); + m_background->update(); +} + void WaylandLocker::showLockWindow() { }