summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorVirt <41426325+VirtCode@users.noreply.github.com>2025-04-25 16:38:31 +0200
committerGitHub <noreply@github.com>2025-04-25 16:38:31 +0200
commit4cf62c114e8fd2cc4fa47d07459e00c52f6dc1d3 (patch)
treecaf19b6084c2f8b4eb1e9f5c604479c99565de4e /src/render/Renderer.cpp
parent41f5f67f6c8675ec48d893007ca93f8bf6c0049a (diff)
layerrules: add abovelock to render above lockscreen (#9793)
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 364f7fde..fd231027 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -690,10 +690,14 @@ void CHyprRenderer::renderWindow(PHLWINDOW pWindow, PHLMONITOR pMonitor, const T
g_pHyprOpenGL->m_RenderData.currentWindow.reset();
}
-void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups) {
+void CHyprRenderer::renderLayer(PHLLS pLayer, PHLMONITOR pMonitor, const Time::steady_tp& time, bool popups, bool lockscreen) {
if (!pLayer)
return;
+ // skip rendering based on abovelock rule and make sure to not render abovelock layers twice
+ if ((pLayer->m_aboveLockscreen && !lockscreen && g_pSessionLockManager->isSessionLocked()) || (lockscreen && !pLayer->m_aboveLockscreen))
+ return;
+
static auto PDIMAROUND = CConfigValue<Hyprlang::FLOAT>("decoration:dim_around");
if (*PDIMAROUND && pLayer->m_dimAround && !m_bRenderingSnapshot && !popups) {
@@ -998,6 +1002,19 @@ void CHyprRenderer::renderLockscreen(PHLMONITOR pMonitor, const Time::steady_tp&
renderSessionLockMissing(pMonitor);
} else {
renderSessionLockSurface(PSLS, pMonitor, now);
+
+ // render layers and then their popups for abovelock rule
+ for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) {
+ for (auto const& ls : lsl) {
+ renderLayer(ls.lock(), pMonitor, now, false, true);
+ }
+ }
+ for (auto const& lsl : pMonitor->m_aLayerSurfaceLayers) {
+ for (auto const& ls : lsl) {
+ renderLayer(ls.lock(), pMonitor, now, true, true);
+ }
+ }
+
g_pSessionLockManager->onLockscreenRenderedOnMonitor(pMonitor->ID);
}
}