diff options
| -rw-r--r-- | src/desktop/rule/windowRule/WindowRuleApplicator.cpp | 21 |
1 files 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<SP<IRule>> toRemove; - bool tagsWereChanged = false; + std::vector<SP<CWindowRule>> toRemove; + std::vector<SP<CWindowRule>> 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<eRuleProperty> props) { |
