diff --git a/hyprtester/src/tests/main/persistent.cpp b/hyprtester/src/tests/main/persistent.cpp index 8a2324a71..bd93e9166 100644 --- a/hyprtester/src/tests/main/persistent.cpp +++ b/hyprtester/src/tests/main/persistent.cpp @@ -30,6 +30,7 @@ static bool test() { 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 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"); @@ -52,7 +53,8 @@ static bool test() { EXPECT_CONTAINS(str, "ID 5 (5)"); EXPECT_CONTAINS(str, "ID 6 (6)"); 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")); diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 4d0a917b0..3b8fb0a5d 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1727,6 +1727,14 @@ WORKSPACEID CCompositor::getNextAvailableNamedWorkspace() { 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; }