summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/desktop/rule/windowRule/WindowRuleApplicator.cpp21
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) {