summaryrefslogtreecommitdiff
path: root/src/render
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2023-11-22 20:05:50 +0000
committerVaxry <vaxry@vaxry.net>2023-11-22 20:05:50 +0000
commit812a3f6d78681abbfbc0b01f3b5956c38ae06c1c (patch)
treed55488f1c9467df579a6d0ce2923ff5e872db477 /src/render
parent44accacff934e798b4ce127b009c39004040385a (diff)
renderer: fix double render of tiled on workspace switch
fixes #3889
Diffstat (limited to 'src/render')
-rw-r--r--src/render/Renderer.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index cd710137..3a5fa0b6 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -256,6 +256,9 @@ void CHyprRenderer::renderWorkspaceWindows(CMonitor* pMonitor, CWorkspace* pWork
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
continue;
+ if (pWorkspace->m_bIsSpecialWorkspace && w->m_iWorkspaceID != pWorkspace->m_iID)
+ continue;
+
// render active window after all others of this pass
if (w.get() == g_pCompositor->m_pLastWindow) {
lastWindow = w.get();
@@ -277,6 +280,9 @@ void CHyprRenderer::renderWorkspaceWindows(CMonitor* pMonitor, CWorkspace* pWork
if (w->m_bIsFloating)
continue; // floating are in the second pass
+ if (pWorkspace->m_bIsSpecialWorkspace && w->m_iWorkspaceID != pWorkspace->m_iID)
+ continue;
+
if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
continue;
@@ -301,21 +307,6 @@ void CHyprRenderer::renderWorkspaceWindows(CMonitor* pMonitor, CWorkspace* pWork
// render the bad boy
renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
}
-
- // pinned always above
- for (auto& w : g_pCompositor->m_vWindows) {
- if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
- continue;
-
- if (!w->m_bPinned || !w->m_bIsFloating)
- continue;
-
- if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
- continue;
-
- // render the bad boy
- renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
- }
}
void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* time, bool decorate, eRenderPassMode mode, bool ignorePosition, bool ignoreAllGeometry) {
@@ -680,6 +671,21 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace*
renderWorkspaceWindows(pMonitor, ws.get(), time);
}
+ // pinned always above
+ for (auto& w : g_pCompositor->m_vWindows) {
+ if (w->isHidden() && !w->m_bIsMapped && !w->m_bFadingOut)
+ continue;
+
+ if (!w->m_bPinned || !w->m_bIsFloating)
+ continue;
+
+ if (!shouldRenderWindow(w.get(), pMonitor, pWorkspace))
+ continue;
+
+ // render the bad boy
+ renderWindow(w.get(), pMonitor, time, true, RENDER_PASS_ALL);
+ }
+
EMIT_HOOK_EVENT("render", RENDER_POST_WINDOWS);
// Render surfaces above windows for monitor