summaryrefslogtreecommitdiff
path: root/src/config
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/config
parentcbefb357a57ce5f6dd161a400a5867609022ee66 (diff)
desktop/layerRule: use variants for storage internally
Improves storage: less dynamic parsing, immediate config errors, faster.
Diffstat (limited to 'src/config')
-rw-r--r--src/config/legacy/ConfigManager.cpp11
-rw-r--r--src/config/lua/bindings/LuaBindingsConfigRules.cpp11
2 files changed, 16 insertions, 6 deletions
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<std::string> 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<Hyprlang::STRING>(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<Hyprlang::STRING>(VAL->getValue()));
+ if (!res)
+ return res.error();
+ }
}
Desktop::Rule::ruleEngine()->registerRule(std::move(rule));
@@ -2025,7 +2028,9 @@ std::optional<std::string> 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);