diff options
author | Vaxry <[email protected]> | 2024-05-07 18:42:55 +0100 |
---|---|---|
committer | Vaxry <[email protected]> | 2024-05-07 18:43:00 +0100 |
commit | 22a86fd7a287e16522bef80d4a89f399ce654cc3 (patch) | |
tree | 35b23b3ca45eb6259e015538ff313ad8f223c4a0 | |
parent | 598bbd186b1e6e70a01ba7f98c89404531008f15 (diff) | |
download | Hyprland-22a86fd7a287e16522bef80d4a89f399ce654cc3.tar.gz Hyprland-22a86fd7a287e16522bef80d4a89f399ce654cc3.zip |
session-lock: don't allow events from rejected locks
fixes #5913
-rw-r--r-- | src/managers/SessionLockManager.cpp | 1 | ||||
-rw-r--r-- | src/protocols/SessionLock.cpp | 12 | ||||
-rw-r--r-- | src/protocols/SessionLock.hpp | 1 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/managers/SessionLockManager.cpp b/src/managers/SessionLockManager.cpp index 6dd096bb..fd4841f4 100644 --- a/src/managers/SessionLockManager.cpp +++ b/src/managers/SessionLockManager.cpp @@ -43,6 +43,7 @@ void CSessionLockManager::onNewSessionLock(SP<CSessionLock> pLock) { if (PROTO::sessionLock->isLocked() && !*PALLOWRELOCK) { Debug::log(LOG, "Cannot re-lock, misc:allow_session_lock_restore is disabled"); + pLock->sendDenied(); return; } diff --git a/src/protocols/SessionLock.cpp b/src/protocols/SessionLock.cpp index 19582be4..db3404be 100644 --- a/src/protocols/SessionLock.cpp +++ b/src/protocols/SessionLock.cpp @@ -113,6 +113,11 @@ CSessionLock::CSessionLock(SP<CExtSessionLockV1> resource_) : resource(resource_ }); resource->setUnlockAndDestroy([this](CExtSessionLockV1* r) { + if (inert) { + PROTO::sessionLock->destroyResource(this); + return; + } + events.unlockAndDestroy.emit(); inert = true; PROTO::sessionLock->locked = false; @@ -132,6 +137,11 @@ bool CSessionLock::good() { return resource->resource(); } +void CSessionLock::sendDenied() { + inert = true; + resource->sendFinished(); +} + CSessionLockProtocol::CSessionLockProtocol(const wl_interface* iface, const int& ver, const std::string& name) : IWaylandProtocol(iface, ver, name) { ; } @@ -171,8 +181,8 @@ void CSessionLockProtocol::onLock(CExtSessionLockManagerV1* pMgr, uint32_t id) { if (m_vLocks.size() > 1) { LOGM(ERR, "Tried to lock a locked session"); - RESOURCE->resource->sendFinished(); RESOURCE->inert = true; + RESOURCE->resource->sendFinished(); return; } diff --git a/src/protocols/SessionLock.hpp b/src/protocols/SessionLock.hpp index b5d7aed5..6b0c4e08 100644 --- a/src/protocols/SessionLock.hpp +++ b/src/protocols/SessionLock.hpp @@ -52,6 +52,7 @@ class CSessionLock { bool good(); void sendLocked(); + void sendDenied(); struct { CSignal newLockSurface; // SP<CSessionLockSurface> |