From 5e8c25d498ed5cb7852ae74a876b0c138a62d59d Mon Sep 17 00:00:00 2001 From: thejch <66577496+thejch@users.noreply.github.com> Date: Sat, 30 Mar 2024 17:49:53 -0700 Subject: core: match all workspace rules instead of the first one only (#5340) --- src/desktop/Window.cpp | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'src/desktop/Window.cpp') diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 81c77455..1336456a 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1088,20 +1088,33 @@ float CWindow::rounding() { } void CWindow::updateSpecialRenderData() { - const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); - const auto WORKSPACERULE = PWORKSPACE ? g_pConfigManager->getWorkspaceRuleFor(PWORKSPACE) : SWorkspaceRule{}; - bool border = true; + const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m_iWorkspaceID); + const auto WORKSPACERULES = PWORKSPACE ? g_pConfigManager->getWorkspaceRulesFor(PWORKSPACE) : std::vector{}; + bool border = true; static auto PNOBORDERONFLOATING = CConfigValue("general:no_border_on_floating"); if (m_bIsFloating && *PNOBORDERONFLOATING == 1) border = false; - m_sSpecialRenderData.border = WORKSPACERULE.border.value_or(border); - m_sSpecialRenderData.borderSize = WORKSPACERULE.borderSize.value_or(-1); - m_sSpecialRenderData.decorate = WORKSPACERULE.decorate.value_or(true); - m_sSpecialRenderData.rounding = WORKSPACERULE.rounding.value_or(true); - m_sSpecialRenderData.shadow = WORKSPACERULE.shadow.value_or(true); + m_sSpecialRenderData.border = border; + m_sSpecialRenderData.borderSize = -1; + m_sSpecialRenderData.decorate = true; + m_sSpecialRenderData.rounding = true; + m_sSpecialRenderData.shadow = true; + + for (auto& wsRule : WORKSPACERULES) { + if (wsRule.border.has_value()) + m_sSpecialRenderData.border = wsRule.border.value(); + if (wsRule.borderSize.has_value()) + m_sSpecialRenderData.borderSize = wsRule.borderSize.value(); + if (wsRule.decorate.has_value()) + m_sSpecialRenderData.decorate = wsRule.decorate.value(); + if (wsRule.rounding.has_value()) + m_sSpecialRenderData.rounding = wsRule.rounding.value(); + if (wsRule.shadow.has_value()) + m_sSpecialRenderData.shadow = wsRule.shadow.value(); + } } int CWindow::getRealBorderSize() { -- cgit v1.2.3