summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-12-09 17:17:02 +0000
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-12-09 17:17:02 +0000
commitd5352a5d1290bee221ef05f555405f14ee9997f5 (patch)
tree6876a9607cb084de1179947b26d8b735db2b8706 /src/helpers/Monitor.cpp
parentfd43d2bea7e8d6e0915c7c2838554cde5356f54f (diff)
find a default workspace smarter
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index d27c0993..f5ddee30 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -240,10 +240,24 @@ bool CMonitor::isMirror() {
return pMirrorOf != nullptr;
}
+int CMonitor::findAvailableDefaultWS() {
+ for (size_t i = 1; i < INT32_MAX; ++i) {
+ if (g_pCompositor->getWorkspaceByID(i))
+ continue;
+
+ if (const auto BOUND = g_pConfigManager->getBoundMonitorStringForWS(std::to_string(i)); !BOUND.empty() && BOUND != szName)
+ continue;
+
+ return i;
+ }
+
+ return INT32_MAX; // shouldn't be reachable
+}
+
void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) {
// Workspace
std::string newDefaultWorkspaceName = "";
- int64_t WORKSPACEID = monitorRule.defaultWorkspace == "" ? g_pCompositor->m_vWorkspaces.size() + 1 : getWorkspaceIDFromString(monitorRule.defaultWorkspace, newDefaultWorkspaceName);
+ int64_t WORKSPACEID = monitorRule.defaultWorkspace == "" ? findAvailableDefaultWS() : getWorkspaceIDFromString(monitorRule.defaultWorkspace, newDefaultWorkspaceName);
if (WORKSPACEID == INT_MAX || (WORKSPACEID >= SPECIAL_WORKSPACE_START && WORKSPACEID <= -2)) {
WORKSPACEID = g_pCompositor->m_vWorkspaces.size() + 1;