From fb46d16fc2bedea96b6b2a4d005ec66d701431aa Mon Sep 17 00:00:00 2001 From: Pppp1116 Date: Wed, 8 Apr 2026 12:06:58 +0100 Subject: rules: make rule prop reset less cursed (#14003) --- src/desktop/rule/layerRule/LayerRuleApplicator.cpp | 40 ++++++++++------------ 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'src/desktop/rule/layerRule/LayerRuleApplicator.cpp') diff --git a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp index fec3a5b2..8c157dae 100644 --- a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp +++ b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp @@ -5,36 +5,34 @@ #include "../../types/OverridableVar.hpp" #include "../../../helpers/MiscFunctions.hpp" #include "../../../event/EventBus.hpp" +#include using namespace Desktop; using namespace Desktop::Rule; +namespace { + template + void resetRuleProp(std::pair, std::underlying_type_t>& prop, + std::underlying_type_t props, Desktop::Types::eOverridePriority prio) { + auto& [value, propMask] = prop; + + if (!(propMask & props)) + return; + + if (prio == Desktop::Types::PRIORITY_WINDOW_RULE) + propMask &= ~props; + + value.unset(prio); + } +} + CLayerRuleApplicator::CLayerRuleApplicator(PHLLS ls) : m_ls(ls) { ; } void CLayerRuleApplicator::resetProps(std::underlying_type_t props, Types::eOverridePriority prio) { - // TODO: fucking kill me, is there a better way to do this? - -#define UNSET(x) \ - if (m_##x.second & props) { \ - if (prio == Types::PRIORITY_WINDOW_RULE) \ - m_##x.second &= ~props; \ - m_##x.first.unset(prio); \ - } - - UNSET(noanim) - UNSET(blur) - UNSET(blurPopups) - UNSET(dimAround) - UNSET(xray) - UNSET(noScreenShare) - UNSET(order) - UNSET(aboveLock) - UNSET(ignoreAlpha) - UNSET(animationStyle) - -#undef UNSET + std::apply([&](auto&... prop) { (resetRuleProp(prop, props, prio), ...); }, + std::forward_as_tuple(m_noanim, m_blur, m_blurPopups, m_dimAround, m_xray, m_noScreenShare, m_order, m_aboveLock, m_ignoreAlpha, m_animationStyle)); if (prio == Types::PRIORITY_WINDOW_RULE) std::erase_if(m_otherProps.props, [props](const auto& el) { return !el.second || el.second->propMask & props; }); -- cgit v1.2.3