summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-02-06 17:45:25 +0000
committerVaxry <vaxry@vaxry.net>2025-02-06 17:45:28 +0000
commit54441e0c4e51dd182f78876c014446d5d0359ba8 (patch)
tree7bbee1b51100ea216d9f5bbfcf720ac47bdc88bc /src/render/Renderer.cpp
parentacbcf0cf115d55ef80a75ded3223a9e098f77541 (diff)
renderer: fix fade out on silent moves to special
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 0fcda827..6f0bbe44 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -379,7 +379,10 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo
if (w->m_bIsFloating)
continue; // floating are in the second pass
- if (pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
+ // some things may force us to ignore the special/not special disparity
+ const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible());
+
+ if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
continue;
// render active window after all others of this pass
@@ -390,11 +393,14 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo
// render the bad boy
renderWindow(w.lock(), pMonitor, time, true, RENDER_PASS_MAIN);
+ w.reset();
}
if (lastWindow)
renderWindow(lastWindow, pMonitor, time, true, RENDER_PASS_MAIN);
+ lastWindow.reset();
+
// Non-floating popup
for (auto& w : windows) {
if (!w)
@@ -403,7 +409,10 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo
if (w->m_bIsFloating)
continue; // floating are in the second pass
- if (pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
+ // some things may force us to ignore the special/not special disparity
+ const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible());
+
+ if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
continue;
// render the bad boy
@@ -419,7 +428,10 @@ void CHyprRenderer::renderWorkspaceWindows(PHLMONITOR pMonitor, PHLWORKSPACE pWo
if (!w->m_bIsFloating || w->m_bPinned)
continue;
- if (pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
+ // some things may force us to ignore the special/not special disparity
+ const bool IGNORE_SPECIAL_CHECK = w->m_iMonitorMovedFrom != -1 && (w->m_pWorkspace && !w->m_pWorkspace->isVisible());
+
+ if (!IGNORE_SPECIAL_CHECK && pWorkspace->m_bIsSpecialWorkspace != w->onSpecialWorkspace())
continue;
if (pWorkspace->m_bIsSpecialWorkspace && w->m_pMonitor != pWorkspace->m_pMonitor)