internal: Ensure unique identifiers for persistent workspaces (#11409)

This commit is contained in:
Arnaud
2025-08-13 09:45:34 +02:00
committed by GitHub
parent 2b6e2ceb2e
commit aa6a78f0a4
2 changed files with 11 additions and 1 deletions

View File

@@ -30,6 +30,7 @@ static bool test() {
OK(getFromSocket("/keyword workspace 5, monitor:HEADLESS-2, persistent:1")); OK(getFromSocket("/keyword workspace 5, monitor:HEADLESS-2, persistent:1"));
OK(getFromSocket("/keyword workspace 6, monitor:HEADLESS-PERSISTENT-TEST, persistent:1")); OK(getFromSocket("/keyword workspace 6, monitor:HEADLESS-PERSISTENT-TEST, persistent:1"));
OK(getFromSocket("/keyword workspace name:PERSIST, monitor:HEADLESS-PERSISTENT-TEST, persistent:1")); OK(getFromSocket("/keyword workspace name:PERSIST, monitor:HEADLESS-PERSISTENT-TEST, persistent:1"));
OK(getFromSocket("/keyword workspace name:PERSIST-2, monitor:HEADLESS-PERSISTENT-TEST, persistent:1"));
{ {
auto str = getFromSocket("/workspaces"); auto str = getFromSocket("/workspaces");
@@ -52,7 +53,8 @@ static bool test() {
EXPECT_CONTAINS(str, "ID 5 (5)"); EXPECT_CONTAINS(str, "ID 5 (5)");
EXPECT_CONTAINS(str, "ID 6 (6)"); EXPECT_CONTAINS(str, "ID 6 (6)");
EXPECT_CONTAINS(str, "(PERSIST) on monitor"); EXPECT_CONTAINS(str, "(PERSIST) on monitor");
EXPECT_COUNT_STRING(str, "workspace ID ", 5); EXPECT_CONTAINS(str, "(PERSIST-2) on monitor");
EXPECT_COUNT_STRING(str, "workspace ID ", 6);
} }
OK(getFromSocket("/reload")); OK(getFromSocket("/reload"));

View File

@@ -1727,6 +1727,14 @@ WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() {
lowest = w->m_id; lowest = w->m_id;
} }
// Give priority to persistent workspaces to avoid any conflicts between them.
for (auto const& rule : g_pConfigManager->getAllWorkspaceRules()) {
if (!rule.isPersistent)
continue;
if (rule.workspaceId < -1 && rule.workspaceId < lowest)
lowest = rule.workspaceId;
}
return lowest - 1; return lowest - 1;
} }