summaryrefslogtreecommitdiff
path: root/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2026-04-28 15:45:14 +0100
committerVaxry <43317083+vaxerski@users.noreply.github.com>2026-04-28 16:52:41 +0100
commit50b555d86c76987069b68cc4865f955c93161a3a (patch)
treeb17299f11c66807f6e5072f428ff7c9569f02e89 /src/desktop/rule/layerRule/LayerRuleApplicator.cpp
parentcbefb357a57ce5f6dd161a400a5867609022ee66 (diff)
desktop/layerRule: use variants for storage internally
Improves storage: less dynamic parsing, immediate config errors, faster.
Diffstat (limited to 'src/desktop/rule/layerRule/LayerRuleApplicator.cpp')
-rw-r--r--src/desktop/rule/layerRule/LayerRuleApplicator.cpp39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
index 8c157dae..79ee80ae 100644
--- a/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
+++ b/src/desktop/rule/layerRule/LayerRuleApplicator.cpp
@@ -3,7 +3,6 @@
#include "../Engine.hpp"
#include "../../view/LayerSurface.hpp"
#include "../../types/OverridableVar.hpp"
-#include "../../../helpers/MiscFunctions.hpp"
#include "../../../event/EventBus.hpp"
#include <tuple>
@@ -39,7 +38,11 @@ void CLayerRuleApplicator::resetProps(std::underlying_type_t<eRuleProperty> prop
}
void CLayerRuleApplicator::applyDynamicRule(const SP<CLayerRule>& rule) {
- for (const auto& [key, effect] : rule->effects()) {
+ for (const auto& effectData : rule->effects()) {
+ const auto key = effectData.key;
+ const auto& effect = effectData.raw;
+ const auto& value = effectData.value;
+
switch (key) {
default: {
if (key <= LAYER_RULE_EFFECT_LAST_STATIC) {
@@ -68,58 +71,52 @@ void CLayerRuleApplicator::applyDynamicRule(const SP<CLayerRule>& rule) {
break;
}
case LAYER_RULE_EFFECT_NO_ANIM: {
- m_noanim.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_noanim.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_noanim.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_BLUR: {
- m_blur.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_blur.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_blur.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_BLUR_POPUPS: {
- m_blurPopups.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_blurPopups.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_blurPopups.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_DIM_AROUND: {
- m_dimAround.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_dimAround.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_dimAround.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_XRAY: {
- m_xray.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_xray.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_xray.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_NO_SCREEN_SHARE: {
- m_noScreenShare.first.set(truthy(effect), Types::PRIORITY_WINDOW_RULE);
+ m_noScreenShare.first.set(std::get<bool>(value), Types::PRIORITY_WINDOW_RULE);
m_noScreenShare.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_ORDER: {
- try {
- m_order.first.set(std::stoi(effect), Types::PRIORITY_WINDOW_RULE);
- m_order.second |= rule->getPropertiesMask();
- } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); }
+ m_order.first.set(std::get<int64_t>(value), Types::PRIORITY_WINDOW_RULE);
+ m_order.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_ABOVE_LOCK: {
- try {
- m_aboveLock.first.set(std::clamp(std::stoull(effect), 0ULL, 2ULL), Types::PRIORITY_WINDOW_RULE);
- m_aboveLock.second |= rule->getPropertiesMask();
- } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); }
+ m_aboveLock.first.set(std::get<int64_t>(value), Types::PRIORITY_WINDOW_RULE);
+ m_aboveLock.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_IGNORE_ALPHA: {
- try {
- m_ignoreAlpha.first.set(std::clamp(std::stof(effect), 0.F, 1.F), Types::PRIORITY_WINDOW_RULE);
- m_ignoreAlpha.second |= rule->getPropertiesMask();
- } catch (...) { Log::logger->log(Log::ERR, "CLayerRuleApplicator::applyDynamicRule: invalid order {}", effect); }
+ m_ignoreAlpha.first.set(std::get<float>(value), Types::PRIORITY_WINDOW_RULE);
+ m_ignoreAlpha.second |= rule->getPropertiesMask();
break;
}
case LAYER_RULE_EFFECT_ANIMATION: {
- m_animationStyle.first.set(effect, Types::PRIORITY_WINDOW_RULE);
+ m_animationStyle.first.set(std::get<std::string>(value), Types::PRIORITY_WINDOW_RULE);
m_animationStyle.second |= rule->getPropertiesMask();
break;
}