diff options
| author | Arnaud <arnaudma.code@gmail.com> | 2025-08-13 09:45:34 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-13 08:45:34 +0100 |
| commit | aa6a78f0a4e17c49ed4aff8b58c3f7ec7ef0408f (patch) | |
| tree | 0467f52be27e283a489edff09009a78a7fbecb03 | |
| parent | 2b6e2ceb2e66407e80b98015eb9f559f06405b2f (diff) | |
internal: Ensure unique identifiers for persistent workspaces (#11409)
| -rw-r--r-- | hyprtester/src/tests/main/persistent.cpp | 4 | ||||
| -rw-r--r-- | src/Compositor.cpp | 8 |
2 files changed, 11 insertions, 1 deletions
diff --git a/hyprtester/src/tests/main/persistent.cpp b/hyprtester/src/tests/main/persistent.cpp index 8a2324a7..bd93e916 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 4d0a917b..3b8fb0a5 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; } |
