From 431325ff0c9bf76fdda5b68df6d60fa267846c92 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Mon, 27 Oct 2025 21:29:35 +0000 Subject: [PATCH] config/rule: don't populate ID field for automatically id-managed workspaces --- src/config/ConfigManager.cpp | 8 ++++---- src/desktop/Workspace.cpp | 2 +- src/helpers/MiscFunctions.cpp | 6 ++++++ src/helpers/MiscFunctions.hpp | 1 + src/managers/KeybindManager.cpp | 10 +++++----- .../trackpad/gestures/SpecialWorkspaceGesture.cpp | 4 ++-- 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 0e88fca3..3c6729c4 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -2396,12 +2396,12 @@ std::optional CConfigManager::handleMonitor(const std::string& comm parser.parseVRR(ARGS[argno + 1]); argno++; } else if (ARGS[argno] == "workspace") { - const auto& [id, name] = getWorkspaceIDNameFromString(ARGS[argno + 1]); + const auto& [id, name, isAutoID] = getWorkspaceIDNameFromString(ARGS[argno + 1]); SWorkspaceRule wsRule; wsRule.monitor = parser.name(); wsRule.workspaceString = ARGS[argno + 1]; - wsRule.workspaceId = id; + wsRule.workspaceId = isAutoID ? WORKSPACE_INVALID : id; wsRule.workspaceName = name; m_workspaceRules.emplace_back(wsRule); @@ -2915,7 +2915,7 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin auto first_ident = trim(value.substr(0, FIRST_DELIM)); - const auto& [id, name] = getWorkspaceIDNameFromString(first_ident); + const auto& [id, name, isAutoID] = getWorkspaceIDNameFromString(first_ident); auto rules = value.substr(FIRST_DELIM + 1); SWorkspaceRule wsRule; @@ -3015,8 +3015,8 @@ std::optional CConfigManager::handleWorkspaceRules(const std::strin return R; } - wsRule.workspaceId = id; wsRule.workspaceName = name; + wsRule.workspaceId = isAutoID ? WORKSPACE_INVALID : id; const auto IT = std::ranges::find_if(m_workspaceRules, [&](const auto& other) { return other.workspaceString == wsRule.workspaceString; }); diff --git a/src/desktop/Workspace.cpp b/src/desktop/Workspace.cpp index a9820635..ee35313a 100644 --- a/src/desktop/Workspace.cpp +++ b/src/desktop/Workspace.cpp @@ -118,7 +118,7 @@ bool CWorkspace::matchesStaticSelector(const std::string& selector_) { return true; if (isNumber(selector)) { - const auto& [wsid, wsname] = getWorkspaceIDNameFromString(selector); + const auto& [wsid, wsname, isAutoID] = getWorkspaceIDNameFromString(selector); if (wsid == WORKSPACE_INVALID) return false; diff --git a/src/helpers/MiscFunctions.cpp b/src/helpers/MiscFunctions.cpp index 17ddc633..4cf3c671 100644 --- a/src/helpers/MiscFunctions.cpp +++ b/src/helpers/MiscFunctions.cpp @@ -115,6 +115,10 @@ bool isDirection(const char& arg) { return arg == 'l' || arg == 'r' || arg == 'u' || arg == 'd' || arg == 't' || arg == 'b'; } +static bool isAutoIDdWorkspace(WORKSPACEID id) { + return id < WORKSPACE_INVALID; +} + SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { SWorkspaceIDName result = {WORKSPACE_INVALID, ""}; @@ -456,6 +460,8 @@ SWorkspaceIDName getWorkspaceIDNameFromString(const std::string& in) { } } + result.isAutoIDd = isAutoIDdWorkspace(result.id); + return result; } diff --git a/src/helpers/MiscFunctions.hpp b/src/helpers/MiscFunctions.hpp index d045e826..5feb2de9 100644 --- a/src/helpers/MiscFunctions.hpp +++ b/src/helpers/MiscFunctions.hpp @@ -17,6 +17,7 @@ struct SCallstackFrameInfo { struct SWorkspaceIDName { WORKSPACEID id = WORKSPACE_INVALID; std::string name; + bool isAutoIDd = false; }; std::string absolutePath(const std::string&, const std::string&); diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index d04d6ba7..68750ad7 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1227,7 +1227,7 @@ SDispatchResult CKeybindManager::changeworkspace(std::string args) { const auto PCURRENTWORKSPACE = PMONITOR->m_activeWorkspace; const bool EXPLICITPREVIOUS = args.contains("previous"); - const auto& [workspaceToChangeTo, workspaceName] = getWorkspaceToChangeFromArgs(args, PCURRENTWORKSPACE, PMONITOR); + const auto& [workspaceToChangeTo, workspaceName, isAutoID] = getWorkspaceToChangeFromArgs(args, PCURRENTWORKSPACE, PMONITOR); if (workspaceToChangeTo == WORKSPACE_INVALID) { Debug::log(ERR, "Error in changeworkspace, invalid value"); return {.success = false, .error = "Error in changeworkspace, invalid value"}; @@ -1389,7 +1389,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspace(std::string args) { if (!PWINDOW) return {.success = false, .error = "Window not found"}; - const auto& [WORKSPACEID, workspaceName] = getWorkspaceIDNameFromString(args); + const auto& [WORKSPACEID, workspaceName, isAutoID] = getWorkspaceIDNameFromString(args); if (WORKSPACEID == WORKSPACE_INVALID) { Debug::log(LOG, "Invalid workspace in moveActiveToWorkspace"); return {.success = false, .error = "Invalid workspace in moveActiveToWorkspace"}; @@ -1452,7 +1452,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspaceSilent(std::string args) { if (!PWINDOW) return {.success = false, .error = "Window not found"}; - const auto& [WORKSPACEID, workspaceName] = getWorkspaceIDNameFromString(args); + const auto& [WORKSPACEID, workspaceName, isAutoID] = getWorkspaceIDNameFromString(args); if (WORKSPACEID == WORKSPACE_INVALID) { Debug::log(ERR, "Error in moveActiveToWorkspaceSilent, invalid value"); return {.success = false, .error = "Error in moveActiveToWorkspaceSilent, invalid value"}; @@ -2050,7 +2050,7 @@ SDispatchResult CKeybindManager::moveWorkspaceToMonitor(std::string args) { } SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args) { - auto [workspaceID, workspaceName] = getWorkspaceIDNameFromString(args); + auto [workspaceID, workspaceName, isAutoID] = getWorkspaceIDNameFromString(args); if (workspaceID == WORKSPACE_INVALID) { Debug::log(ERR, "focusWorkspaceOnCurrentMonitor invalid workspace!"); return {.success = false, .error = "focusWorkspaceOnCurrentMonitor invalid workspace!"}; @@ -2104,7 +2104,7 @@ SDispatchResult CKeybindManager::focusWorkspaceOnCurrentMonitor(std::string args } SDispatchResult CKeybindManager::toggleSpecialWorkspace(std::string args) { - const auto& [workspaceID, workspaceName] = getWorkspaceIDNameFromString("special:" + args); + const auto& [workspaceID, workspaceName, isAutoID] = getWorkspaceIDNameFromString("special:" + args); if (workspaceID == WORKSPACE_INVALID || !g_pCompositor->isWorkspaceSpecial(workspaceID)) { Debug::log(ERR, "Invalid workspace passed to special"); return {.success = false, .error = "Invalid workspace passed to special"}; diff --git a/src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp b/src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp index 146d3b50..06a18502 100644 --- a/src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp +++ b/src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp @@ -51,8 +51,8 @@ void CSpecialWorkspaceGesture::begin(const ITrackpadGesture::STrackpadGestureBeg m_animatingOut = false; - const auto& [workspaceID, workspaceName] = getWorkspaceIDNameFromString("special:" + m_specialWorkspaceName); - const auto WS = g_pCompositor->createNewWorkspace(workspaceID, m_monitor->m_id, workspaceName); + const auto& [workspaceID, workspaceName, isAutoID] = getWorkspaceIDNameFromString("special:" + m_specialWorkspaceName); + const auto WS = g_pCompositor->createNewWorkspace(workspaceID, m_monitor->m_id, workspaceName); m_monitor->setSpecialWorkspace(WS); m_specialWorkspace = WS; }