aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorVaxry <[email protected]>2024-05-07 18:42:55 +0100
committerVaxry <[email protected]>2024-05-07 18:43:00 +0100
commit22a86fd7a287e16522bef80d4a89f399ce654cc3 (patch)
tree35b23b3ca45eb6259e015538ff313ad8f223c4a0
parent598bbd186b1e6e70a01ba7f98c89404531008f15 (diff)
downloadHyprland-22a86fd7a287e16522bef80d4a89f399ce654cc3.tar.gz
Hyprland-22a86fd7a287e16522bef80d4a89f399ce654cc3.zip
session-lock: don't allow events from rejected locks
fixes #5913
-rw-r--r--src/managers/SessionLockManager.cpp1
-rw-r--r--src/protocols/SessionLock.cpp12
-rw-r--r--src/protocols/SessionLock.hpp1
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>