From 1ababf4575dcc7c983c2911b99f13641911fc673 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Sun, 30 Nov 2025 23:43:50 +0800 Subject: chore: apply exec rules after removal and use CWindowRule --- .../rule/windowRule/WindowRuleApplicator.cpp | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/desktop/rule/windowRule/WindowRuleApplicator.cpp b/src/desktop/rule/windowRule/WindowRuleApplicator.cpp index f28aa5a5..18f3f69f 100644 --- a/src/desktop/rule/windowRule/WindowRuleApplicator.cpp +++ b/src/desktop/rule/windowRule/WindowRuleApplicator.cpp @@ -545,8 +545,9 @@ void CWindowRuleApplicator::readStaticRules() { static_ = {}; - std::vector> toRemove; - bool tagsWereChanged = false; + std::vector> toRemove; + std::vector> execRules; + bool tagsWereChanged = false; for (const auto& r : ruleEngine()->rules()) { if (r->type() != RULE_TYPE_WINDOW) @@ -557,12 +558,15 @@ void CWindowRuleApplicator::readStaticRules() { if (!wr->matches(m_window.lock(), true)) continue; + if (wr->isExecRule()) { + toRemove.emplace_back(wr); + execRules.emplace_back(wr); + continue; + } + applyStaticRule(wr); - const auto RES = applyDynamicRule(wr); // also apply dynamic, because we won't recheck it before layout gets data + const auto RES = applyDynamicRule(wr); tagsWereChanged = tagsWereChanged || RES.tagsChanged; - - if (wr->isExecRule()) - toRemove.emplace_back(wr); } for (const auto& wr : toRemove) { @@ -592,6 +596,11 @@ void CWindowRuleApplicator::readStaticRules() { applyStaticRule(wr); } } + + for (const auto& wr : execRules) { + applyStaticRule(wr); + applyDynamicRule(wr); + } } void CWindowRuleApplicator::propertiesChanged(std::underlying_type_t props) { -- cgit v1.2.3