summaryrefslogtreecommitdiff
path: root/src/managers/SessionLockManager.hpp
diff options
context:
space:
mode:
authorMaximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com>2024-03-15 17:17:13 +0100
committerGitHub <noreply@github.com>2024-03-15 16:17:13 +0000
commita958884b5259ec5d6a2c97078b373c722ae20c39 (patch)
tree63d68faee163ee320098e1d13057490704bbe0e6 /src/managers/SessionLockManager.hpp
parentbb933dcf04ff1daafbc9681c87b87d7e907ae7bd (diff)
lock: fix red screen issues with multiple monitors (#5100)
* lock: use uint64_t for iMonitorID * lock: move activateLock to onNewSessionLock * lock: add red screen fade * lock: damage when fading the red screen and delay for screencopy * lock: remove redundant scheduleFrameForMonitor
Diffstat (limited to 'src/managers/SessionLockManager.hpp')
-rw-r--r--src/managers/SessionLockManager.hpp10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/managers/SessionLockManager.hpp b/src/managers/SessionLockManager.hpp
index 51232867..c2c539db 100644
--- a/src/managers/SessionLockManager.hpp
+++ b/src/managers/SessionLockManager.hpp
@@ -1,10 +1,13 @@
#pragma once
#include "../defines.hpp"
+#include "../helpers/Timer.hpp"
+#include <cstdint>
+#include <unordered_map>
struct SSessionLockSurface {
wlr_session_lock_surface_v1* pWlrLockSurface = nullptr;
- int iMonitorID = -1;
+ uint64_t iMonitorID = -1;
bool mapped = false;
@@ -18,6 +21,7 @@ struct SSessionLock {
wlr_session_lock_v1* pWlrLock = nullptr;
std::vector<std::unique_ptr<SSessionLockSurface>> vSessionLockSurfaces;
+ std::unordered_map<uint64_t, CTimer> mMonitorsWithoutMappedSurfaceTimers;
DYNLISTENER(newSurface);
DYNLISTENER(unlock);
@@ -30,7 +34,9 @@ class CSessionLockManager {
~CSessionLockManager() = default;
void onNewSessionLock(wlr_session_lock_v1*);
- SSessionLockSurface* getSessionLockSurfaceForMonitor(const int&);
+ SSessionLockSurface* getSessionLockSurfaceForMonitor(uint64_t);
+
+ float getRedScreenAlphaForMonitor(uint64_t);
bool isSessionLocked();
bool isSurfaceSessionLock(wlr_surface*);