summaryrefslogtreecommitdiff
path: root/src/config/ConfigManager.cpp
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-04-19 18:20:16 -0700
committerGitHub <noreply@github.com>2024-04-20 02:20:16 +0100
commit10caa03ce5bc2ce8238c494d59405213d32ddead (patch)
tree192cbe23eb7c049dde26979a85c9eb4ba106f9eb /src/config/ConfigManager.cpp
parent1ebc32f5f4b04c913fb6301b886e016afec4c20e (diff)
config: merge all rules set for the same workspace selection (#5656)
Diffstat (limited to 'src/config/ConfigManager.cpp')
-rw-r--r--src/config/ConfigManager.cpp64
1 files changed, 35 insertions, 29 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index b2d82348..f959e3a0 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -970,39 +970,45 @@ SWorkspaceRule CConfigManager::getWorkspaceRuleFor(PHLWORKSPACE pWorkspace) {
if (!pWorkspace->matchesStaticSelector(rule.workspaceString))
continue;
- if (rule.isDefault)
- mergedRule.isDefault = true;
- if (rule.isPersistent)
- mergedRule.isPersistent = true;
- if (rule.gapsIn.has_value())
- mergedRule.gapsIn = rule.gapsIn;
- if (rule.gapsOut.has_value())
- mergedRule.gapsOut = rule.gapsOut;
- if (rule.borderSize.has_value())
- mergedRule.borderSize = rule.borderSize;
- if (rule.border.has_value())
- mergedRule.border = rule.border;
- if (rule.rounding.has_value())
- mergedRule.rounding = rule.rounding;
- if (rule.decorate.has_value())
- mergedRule.decorate = rule.decorate;
- if (rule.shadow.has_value())
- mergedRule.shadow = rule.shadow;
- if (rule.onCreatedEmptyRunCmd.has_value())
- mergedRule.onCreatedEmptyRunCmd = rule.onCreatedEmptyRunCmd;
- if (rule.defaultName.has_value())
- mergedRule.defaultName = rule.defaultName;
-
- if (!rule.layoutopts.empty()) {
- for (const auto& layoutopt : rule.layoutopts) {
- mergedRule.layoutopts[layoutopt.first] = layoutopt.second;
- }
- }
+ mergedRule = mergeWorkspaceRules(mergedRule, rule);
}
return mergedRule;
}
+SWorkspaceRule CConfigManager::mergeWorkspaceRules(const SWorkspaceRule& rule1, const SWorkspaceRule& rule2) {
+ SWorkspaceRule mergedRule = rule1;
+
+ if (rule2.isDefault)
+ mergedRule.isDefault = true;
+ if (rule2.isPersistent)
+ mergedRule.isPersistent = true;
+ if (rule2.gapsIn.has_value())
+ mergedRule.gapsIn = rule2.gapsIn;
+ if (rule2.gapsOut.has_value())
+ mergedRule.gapsOut = rule2.gapsOut;
+ if (rule2.borderSize.has_value())
+ mergedRule.borderSize = rule2.borderSize;
+ if (rule2.border.has_value())
+ mergedRule.border = rule2.border;
+ if (rule2.rounding.has_value())
+ mergedRule.rounding = rule2.rounding;
+ if (rule2.decorate.has_value())
+ mergedRule.decorate = rule2.decorate;
+ if (rule2.shadow.has_value())
+ mergedRule.shadow = rule2.shadow;
+ if (rule2.onCreatedEmptyRunCmd.has_value())
+ mergedRule.onCreatedEmptyRunCmd = rule2.onCreatedEmptyRunCmd;
+ if (rule2.defaultName.has_value())
+ mergedRule.defaultName = rule2.defaultName;
+ if (!rule2.layoutopts.empty()) {
+ for (const auto& layoutopt : rule2.layoutopts) {
+ mergedRule.layoutopts[layoutopt.first] = layoutopt.second;
+ }
+ }
+ return mergedRule;
+}
+
std::vector<SWindowRule> CConfigManager::getMatchingRules(CWindow* pWindow, bool dynamic, bool shadowExec) {
if (!g_pCompositor->windowExists(pWindow))
return std::vector<SWindowRule>();
@@ -2307,7 +2313,7 @@ std::optional<std::string> CConfigManager::handleWorkspaceRules(const std::strin
if (IT == m_dWorkspaceRules.end())
m_dWorkspaceRules.emplace_back(wsRule);
else
- *IT = wsRule;
+ *IT = mergeWorkspaceRules(*IT, wsRule);
return {};
}