diff options
| author | Vaxry <vaxry@vaxry.net> | 2024-03-25 16:20:30 +0000 |
|---|---|---|
| committer | Vaxry <vaxry@vaxry.net> | 2024-03-25 16:20:30 +0000 |
| commit | ae17e900e720430c7848faf1b6e21b5f352c26ca (patch) | |
| tree | 32b2a0e96a78f3c487f9d2bad96492bc6fb49719 /src/render | |
| parent | ca17a89d86b73f37019c4cc0c7087303adbcc1f9 (diff) | |
layer-shell: render popups above everything
Diffstat (limited to 'src/render')
| -rw-r--r-- | src/render/Renderer.cpp | 14 | ||||
| -rw-r--r-- | src/render/Renderer.hpp | 2 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 3e8b277f..4680568c 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -646,7 +646,7 @@ void CHyprRenderer::renderWindow(CWindow* pWindow, CMonitor* pMonitor, timespec* g_pHyprOpenGL->m_RenderData.clipBox = CBox(); } -void CHyprRenderer::renderLayer(SLayerSurface* pLayer, CMonitor* pMonitor, timespec* time) { +void CHyprRenderer::renderLayer(SLayerSurface* pLayer, CMonitor* pMonitor, timespec* time, bool popups) { if (pLayer->fadingOut) { g_pHyprOpenGL->renderSnapshot(&pLayer); return; @@ -678,13 +678,15 @@ void CHyprRenderer::renderLayer(SLayerSurface* pLayer, CMonitor* pMonitor, times g_pHyprOpenGL->m_RenderData.discardOpacity = pLayer->ignoreAlphaValue; } - wlr_surface_for_each_surface(pLayer->layerSurface->surface, renderSurface, &renderdata); + if (!popups) + wlr_surface_for_each_surface(pLayer->layerSurface->surface, renderSurface, &renderdata); renderdata.squishOversized = false; // don't squish popups renderdata.dontRound = true; renderdata.popup = true; renderdata.blur = pLayer->forceBlurPopups; - wlr_layer_surface_v1_for_each_popup_surface(pLayer->layerSurface, renderSurface, &renderdata); + if (popups) + wlr_layer_surface_v1_for_each_popup_surface(pLayer->layerSurface, renderSurface, &renderdata); g_pHyprOpenGL->m_pCurrentLayer = nullptr; g_pHyprOpenGL->m_RenderData.clipBox = {}; @@ -855,6 +857,12 @@ void CHyprRenderer::renderAllClientsForWorkspace(CMonitor* pMonitor, CWorkspace* renderLayer(ls.get(), pMonitor, time); } + for (auto& lsl : pMonitor->m_aLayerSurfaceLayers) { + for (auto& ls : lsl) { + renderLayer(ls.get(), pMonitor, time, true); + } + } + renderDragIcon(pMonitor, time); //g_pHyprOpenGL->restoreMatrix(); diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index 011b17b9..d73b4c5f 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -113,7 +113,7 @@ class CHyprRenderer { void renderWorkspaceWindowsFullscreen(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (fullscreen) (tiled, floating, pinned, but no special) void renderWorkspaceWindows(CMonitor*, CWorkspace*, timespec*); // renders workspace windows (no fullscreen) (tiled, floating, pinned, but no special) void renderWindow(CWindow*, CMonitor*, timespec*, bool, eRenderPassMode, bool ignorePosition = false, bool ignoreAllGeometry = false); - void renderLayer(SLayerSurface*, CMonitor*, timespec*); + void renderLayer(SLayerSurface*, CMonitor*, timespec*, bool popups = false); void renderSessionLockSurface(SSessionLockSurface*, CMonitor*, timespec*); void renderDragIcon(CMonitor*, timespec*); void renderIMEPopup(CInputPopup*, CMonitor*, timespec*); |
