diff options
| author | Maximilian Seidler <78690852+PaideiaDilemma@users.noreply.github.com> | 2024-03-15 17:17:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-15 16:17:13 +0000 |
| commit | a958884b5259ec5d6a2c97078b373c722ae20c39 (patch) | |
| tree | 63d68faee163ee320098e1d13057490704bbe0e6 /src/managers/SessionLockManager.hpp | |
| parent | bb933dcf04ff1daafbc9681c87b87d7e907ae7bd (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.hpp | 10 |
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*); |
