summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/helpers/Monitor.hpp1
-rw-r--r--src/render/Renderer.cpp4
2 files changed, 4 insertions, 1 deletions
diff --git a/src/helpers/Monitor.hpp b/src/helpers/Monitor.hpp
index 17ce15d4..d1f9a556 100644
--- a/src/helpers/Monitor.hpp
+++ b/src/helpers/Monitor.hpp
@@ -177,6 +177,7 @@ class CMonitor {
// for direct scanout
PHLWINDOWREF m_lastScanout;
+ bool m_directScanoutIsActive = false; // for cleanup logic. m_lastScanout.expired() can become true before the DS cleanup if client crashes/exits while DS is active.
bool m_scanoutNeedsCursorUpdate = false;
// for special fade/blur
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index c4375be4..1b95ce8a 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1315,10 +1315,12 @@ void CHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
bool shouldTear = pMonitor->updateTearing();
if (pMonitor->attemptDirectScanout()) {
+ pMonitor->m_directScanoutIsActive = true;
return;
- } else if (!pMonitor->m_lastScanout.expired()) {
+ } else if (!pMonitor->m_lastScanout.expired() || pMonitor->m_directScanoutIsActive) {
Log::logger->log(Log::DEBUG, "Left a direct scanout.");
pMonitor->m_lastScanout.reset();
+ pMonitor->m_directScanoutIsActive = false;
// reset DRM format, but only if needed since it might modeset
if (pMonitor->m_output->state->state().drmFormat != pMonitor->m_prevDrmFormat)