diff options
Diffstat (limited to 'src/desktop/rule/windowRule/WindowRule.cpp')
| -rw-r--r-- | src/desktop/rule/windowRule/WindowRule.cpp | 24 |
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); } |
