diff options
| author | Vaxry <vaxry@vaxry.net> | 2023-11-22 20:05:50 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2023-11-22 20:05:50 +0000 |
| commit | 812a3f6d78681abbfbc0b01f3b5956c38ae06c1c (patch) | |
| tree | d55488f1c9467df579a6d0ce2923ff5e872db477 /src/render | |
| parent | 44accacff934e798b4ce127b009c39004040385a (diff) | |
renderer: fix double render of tiled on workspace switch
fixes #3889
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/Renderer.cpp | 36 |
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 |
