summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVaxry <vaxry@vaxry.net>2025-10-27 21:29:35 +0000
committerVaxry <vaxry@vaxry.net>2025-10-27 21:29:35 +0000
commit431325ff0c9bf76fdda5b68df6d60fa267846c92 (patch)
tree3be23fd3cbe2aa2661295f3f73079098c2977ce4 /src
parent40831a90a0354af98e948ce8a4daf6440dc6c390 (diff)
config/rule: don't populate ID field for automatically id-managed workspaces
Diffstat (limited to 'src')
-rw-r--r--src/config/ConfigManager.cpp8
-rw-r--r--src/desktop/Workspace.cpp2
-rw-r--r--src/helpers/MiscFunctions.cpp6
-rw-r--r--src/helpers/MiscFunctions.hpp1
-rw-r--r--src/managers/KeybindManager.cpp10
-rw-r--r--src/managers/input/trackpad/gestures/SpecialWorkspaceGesture.cpp4
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<std::string> 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<std::string> 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<std::string> 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;
}