From 50b555d86c76987069b68cc4865f955c93161a3a Mon Sep 17 00:00:00 2001 From: Vaxry Date: Tue, 28 Apr 2026 15:45:14 +0100 Subject: desktop/layerRule: use variants for storage internally Improves storage: less dynamic parsing, immediate config errors, faster. --- src/config/legacy/ConfigManager.cpp | 11 ++++++++--- src/config/lua/bindings/LuaBindingsConfigRules.cpp | 11 ++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src/config') diff --git a/src/config/legacy/ConfigManager.cpp b/src/config/legacy/ConfigManager.cpp index 5d74528d..3e6fe6e9 100644 --- a/src/config/legacy/ConfigManager.cpp +++ b/src/config/legacy/ConfigManager.cpp @@ -922,8 +922,11 @@ std::optional CConfigManager::addLayerRuleFromConfigKey(const std:: for (const auto& e : Desktop::Rule::layerEffects()->allEffectStrings()) { auto VAL = m_config->getSpecialConfigValuePtr("layerrule", e.c_str(), name.c_str()); - if (VAL && VAL->m_bSetByUser) - rule->addEffect(Desktop::Rule::layerEffects()->get(e).value_or(Desktop::Rule::LAYER_RULE_EFFECT_NONE), std::any_cast(VAL->getValue())); + if (VAL && VAL->m_bSetByUser) { + auto res = rule->addEffect(Desktop::Rule::layerEffects()->get(e).value_or(Desktop::Rule::LAYER_RULE_EFFECT_NONE), std::any_cast(VAL->getValue())); + if (!res) + return res.error(); + } } Desktop::Rule::ruleEngine()->registerRule(std::move(rule)); @@ -2025,7 +2028,9 @@ std::optional CConfigManager::handleLayerrule(const std::string& co const auto EFFECT = Desktop::Rule::layerEffects()->get(FIRST); if (!EFFECT.has_value()) return std::format("invalid effect {}", el); - rule->addEffect(*EFFECT, std::string{el.substr(spacePos + 1)}); + auto res = rule->addEffect(*EFFECT, std::string{el.substr(spacePos + 1)}); + if (!res) + return res.error(); } else return std::format("invalid field type {}", FIRST); } diff --git a/src/config/lua/bindings/LuaBindingsConfigRules.cpp b/src/config/lua/bindings/LuaBindingsConfigRules.cpp index 4f9fc861..88761f05 100644 --- a/src/config/lua/bindings/LuaBindingsConfigRules.cpp +++ b/src/config/lua/bindings/LuaBindingsConfigRules.cpp @@ -1186,8 +1186,11 @@ static int hlLayerRule(lua_State* L) { auto val = Internal::ruleValueToString(L); if (!val) self->addError(std::format("{}: hl.layer_rule: field '{}': {}", sourceInfo, key, val.error())); - else - rule->addEffect(*dynamicEffect, *val); + else { + auto res = rule->addEffect(*dynamicEffect, *val); + if (!res) + self->addError(std::format("{}: hl.layer_rule: field '{}': {}", sourceInfo, key, res.error())); + } lua_pop(L, 1); continue; @@ -1199,7 +1202,9 @@ static int hlLayerRule(lua_State* L) { self->addError(std::format("{}: hl.layer_rule: field '{}': {}", sourceInfo, key, err.message)); else { auto str = val->toString(); - rule->addEffect(desc->effect, str); + auto res = rule->addEffect(desc->effect, str); + if (!res) + self->addError(std::format("{}: hl.layer_rule: field '{}': {}", sourceInfo, key, res.error())); } lua_pop(L, 1); -- cgit v1.2.3