summaryrefslogtreecommitdiff
path: root/src/desktop/rule/windowRule/WindowRule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop/rule/windowRule/WindowRule.cpp')
-rw-r--r--src/desktop/rule/windowRule/WindowRule.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/desktop/rule/windowRule/WindowRule.cpp b/src/desktop/rule/windowRule/WindowRule.cpp
index c2b520c0..10d39383 100644
--- a/src/desktop/rule/windowRule/WindowRule.cpp
+++ b/src/desktop/rule/windowRule/WindowRule.cpp
@@ -259,13 +259,19 @@ static std::expected<WindowRuleEffectValue, std::string> parseWindowRuleEffect(C
case WINDOW_RULE_EFFECT_MOVE:
case WINDOW_RULE_EFFECT_SIZE:
+ case WINDOW_RULE_EFFECT_MAX_SIZE:
+ case WINDOW_RULE_EFFECT_MIN_SIZE: {
+ auto parsed = Math::parseExpressionVec2(raw);
+ if (!parsed)
+ return std::unexpected(std::format("{} rule \"{}\" failed with: {}", EFFECT_NAME, raw, parsed.error()));
+ return *parsed;
+ }
+
case WINDOW_RULE_EFFECT_MONITOR:
case WINDOW_RULE_EFFECT_WORKSPACE:
case WINDOW_RULE_EFFECT_GROUP:
case WINDOW_RULE_EFFECT_ANIMATION:
- case WINDOW_RULE_EFFECT_TAG:
- case WINDOW_RULE_EFFECT_MAX_SIZE:
- case WINDOW_RULE_EFFECT_MIN_SIZE: return std::string{raw};
+ case WINDOW_RULE_EFFECT_TAG: return std::string{raw};
case WINDOW_RULE_EFFECT_SUPPRESSEVENT: return parseStringList(raw);
@@ -334,6 +340,18 @@ CWindowRule::CWindowRule(const std::string& name) : CRuleWithEffects<SWindowRule
;
}
+std::expected<void, std::string> CWindowRule::addEffect(CWindowRule::storageType e, const Math::SExpressionVec2& expr) {
+ switch (e) {
+ case WINDOW_RULE_EFFECT_MOVE:
+ case WINDOW_RULE_EFFECT_SIZE:
+ case WINDOW_RULE_EFFECT_MAX_SIZE:
+ case WINDOW_RULE_EFFECT_MIN_SIZE: break;
+ default: return std::unexpected(std::format("{} is not an expression vec2 window rule effect", windowEffects()->get(e)));
+ }
+
+ return addParsedEffect(e, expr, expr.toString());
+}
+
std::expected<WindowRuleEffectValue, std::string> CWindowRule::parseEffect(CWindowRule::storageType e, const std::string& result) {
return parseWindowRuleEffect(e, result);
}