diff --git a/src/wayland/session_lock.cpp b/src/wayland/session_lock.cpp index ccba9bc6..0ecf9ec0 100644 --- a/src/wayland/session_lock.cpp +++ b/src/wayland/session_lock.cpp @@ -109,6 +109,13 @@ void WlSessionLock::updateSurfaces(bool show, WlSessionLock* old) { void WlSessionLock::realizeLockTarget(WlSessionLock* old) { if (this->lockTarget) { + if (!SessionLockManager::lockAvailable()) { + qCritical() << "Cannot start session lock: The current compositor does not support the " + "ext-session-lock-v1 protocol."; + this->unlock(); + return; + } + if (this->mSurfaceComponent == nullptr) { qWarning() << "WlSessionLock.surface is null. Aborting lock."; this->unlock(); diff --git a/src/wayland/session_lock/session_lock.cpp b/src/wayland/session_lock/session_lock.cpp index 50e88185..c32dd90a 100644 --- a/src/wayland/session_lock/session_lock.cpp +++ b/src/wayland/session_lock/session_lock.cpp @@ -22,6 +22,8 @@ QSWaylandSessionLockManager* manager() { } } // namespace +bool SessionLockManager::lockAvailable() { return manager()->isActive(); } + bool SessionLockManager::lock() { if (this->isLocked() || SessionLockManager::sessionLocked()) return false; this->mLock = manager()->acquireLock(); diff --git a/src/wayland/session_lock/session_lock.hpp b/src/wayland/session_lock/session_lock.hpp index 1ad6ae90..5a558966 100644 --- a/src/wayland/session_lock/session_lock.hpp +++ b/src/wayland/session_lock/session_lock.hpp @@ -15,6 +15,8 @@ class SessionLockManager: public QObject { public: explicit SessionLockManager(QObject* parent = nullptr): QObject(parent) {} + [[nodiscard]] static bool lockAvailable(); + // Returns true if a lock was acquired. // If true is returned the caller must watch the global screen list and create/destroy // windows with an attached LockWindowExtension to match it.