summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorRoberto Previdi <hariseldon78@gmail.com>2025-02-15 15:01:52 +0100
committerGitHub <noreply@github.com>2025-02-15 15:01:52 +0100
commit410da2e46fc44d93196cd902a070391a416cff01 (patch)
treec66effd5facc0a7e30efad024ba49e952b9046c2 /src/Compositor.cpp
parent7a6fde8414ae200759ac41569f189ac5e1ba0fbb (diff)
workspaces: update persistence on workspace rename (#9368)
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp49
1 files changed, 33 insertions, 16 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 6d9e8d7e..5389844f 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -3043,34 +3043,53 @@ bool CCompositor::shouldChangePreferredImageDescription() {
return false;
}
-void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspaceRule>& rules) {
+void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspaceRule>& rules, PHLWORKSPACE pWorkspace) {
+
for (const auto& rule : rules) {
if (!rule.isPersistent)
continue;
+ PHLWORKSPACE PWORKSPACE = nullptr;
+ if (pWorkspace) {
+ if (pWorkspace->matchesStaticSelector(rule.workspaceString))
+ PWORKSPACE = pWorkspace;
+ else
+ continue;
+ }
+
const auto PMONITOR = getMonitorFromString(rule.monitor);
- if (!PMONITOR) {
- Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve monitor for {}, skipping", rule.monitor);
- continue;
- }
+ if (!PWORKSPACE) {
+ WORKSPACEID id = rule.workspaceId;
+ std::string wsname = rule.workspaceName;
- WORKSPACEID id = rule.workspaceId;
- std::string wsname = rule.workspaceName;
- if (id == WORKSPACE_INVALID) {
- const auto R = getWorkspaceIDNameFromString(rule.workspaceString);
- id = R.id;
- wsname = R.name;
+ if (id == WORKSPACE_INVALID) {
+ const auto R = getWorkspaceIDNameFromString(rule.workspaceString);
+ id = R.id;
+ wsname = R.name;
+ }
+
+ if (id == WORKSPACE_INVALID) {
+ Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve id for workspace {}", rule.workspaceString);
+ continue;
+ }
+ PWORKSPACE = getWorkspaceByID(id);
+ if (!PWORKSPACE)
+ createNewWorkspace(id, PMONITOR ? PMONITOR : m_pLastMonitor.lock(), wsname, false);
}
- if (id == WORKSPACE_INVALID) {
- Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve id for workspace {}", rule.workspaceString);
+ if (PWORKSPACE)
+ PWORKSPACE->m_bPersistent = true;
+
+ if (!PMONITOR) {
+ Debug::log(ERR, "ensurePersistentWorkspacesPresent: couldn't resolve monitor for {}, skipping", rule.monitor);
continue;
}
- if (const auto PWORKSPACE = getWorkspaceByID(id); PWORKSPACE) {
+ if (PWORKSPACE) {
if (PWORKSPACE->m_pMonitor == PMONITOR) {
Debug::log(LOG, "ensurePersistentWorkspacesPresent: workspace persistent {} already on {}", rule.workspaceString, PMONITOR->szName);
+
continue;
}
@@ -3078,8 +3097,6 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspace
moveWorkspaceToMonitor(PWORKSPACE, PMONITOR);
continue;
}
-
- createNewWorkspace(id, PMONITOR ? PMONITOR : m_pLastMonitor.lock(), wsname, false);
}
// cleanup old