summaryrefslogtreecommitdiff
path: root/src/config/ConfigManager.cpp
diff options
context:
space:
mode:
authorthejch <66577496+thejch@users.noreply.github.com>2024-04-05 08:54:30 -0700
committerGitHub <noreply@github.com>2024-04-05 16:54:30 +0100
commit1e8f57c7340850ff08e4a4919e06d830be28b7b9 (patch)
treef4abda938c24531e7234efd4375ae6e31ae435a5 /src/config/ConfigManager.cpp
parent942172d2dc9194b95d637283ec3338c06c9c6597 (diff)
workspacerules: fix workspace rule loops (#5433)
Diffstat (limited to 'src/config/ConfigManager.cpp')
-rw-r--r--src/config/ConfigManager.cpp40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index edbfa2b3..a622e6d0 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -965,13 +965,43 @@ SMonitorRule CConfigManager::getMonitorRuleFor(const CMonitor& PMONITOR) {
return SMonitorRule{.name = "", .resolution = Vector2D(0, 0), .offset = Vector2D(-INT32_MAX, -INT32_MAX), .scale = -1}; // 0, 0 is preferred and -1, -1 is auto
}
-std::vector<SWorkspaceRule> CConfigManager::getWorkspaceRulesFor(PHLWORKSPACE pWorkspace) {
- std::vector<SWorkspaceRule> results;
+SWorkspaceRule CConfigManager::getWorkspaceRuleFor(PHLWORKSPACE pWorkspace) {
+ SWorkspaceRule mergedRule{};
for (auto& rule : m_dWorkspaceRules) {
- if (pWorkspace->matchesStaticSelector(rule.workspaceString))
- results.push_back(rule);
+ 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;
+ }
+ }
}
- return results;
+
+ return mergedRule;
}
std::vector<SWindowRule> CConfigManager::getMatchingRules(CWindow* pWindow, bool dynamic, bool shadowExec) {