summaryrefslogtreecommitdiff
path: root/src/managers/input/Swipe.cpp
diff options
context:
space:
mode:
authorkerty0 <81302457+kerty0@users.noreply.github.com>2025-04-07 15:46:31 +0300
committerGitHub <noreply@github.com>2025-04-07 14:46:31 +0200
commit8a8f394da70e40043d1ba2c193b81867560b2b05 (patch)
tree0620c25df4c05a14bc6dc28118396d53fc958160 /src/managers/input/Swipe.cpp
parent51838fb5f5b5b03bca99b324fb1f6494d3854f89 (diff)
swipe: fix swiping onto a new workspace bound to another monitor (#8176) (#9927)
The previous code didn't check if the chosen new workspace was bound to another monitor, causing buggy behavior where workspace was simultaneously open and not. The fix simply uses `r+1` for new workspace selection. Also, the previous code would select rightmost workspace + 1, creating large gaps in workspace IDs in some scenarios. Example (`()` and `[]` indicate workspaces on different monitors): `(1), 2, 3, 4, 5, 6, 7, 8, 9, [10]` Swipe right on `()` monitor would create: `(1), 2, 3, 4, 5, 6, 7, 8, 9, [10], (11)` But with this commit: `(1), (2), 3, 4, 5, 6, 7, 8, 9, [10]`
Diffstat (limited to 'src/managers/input/Swipe.cpp')
-rw-r--r--src/managers/input/Swipe.cpp13
1 files changed, 1 insertions, 12 deletions
diff --git a/src/managers/input/Swipe.cpp b/src/managers/input/Swipe.cpp
index d199aef4..70700bf4 100644
--- a/src/managers/input/Swipe.cpp
+++ b/src/managers/input/Swipe.cpp
@@ -71,19 +71,8 @@ void CInputManager::endWorkspaceSwipe() {
// If we've been swiping off the right end with PSWIPENEW enabled, there is
// no workspace there yet, and we need to choose an ID for a new one now.
- // With multiple monitors, it might not be appropriate to choose one more
- // than the ID of the workspace we're swiping from, because that ID might
- // just be on another monitor. It's also not just the smallest unused ID,
- // because that could be a gap in the existing workspace numbers, and it'd
- // be counterintuitive to swipe rightwards onto a new workspace and end up
- // left of where we started. Instead, it's one more than the greatest
- // workspace ID that currently exists.
if (workspaceIDRight <= m_sActiveSwipe.pWorkspaceBegin->m_iID && *PSWIPENEW) {
- WORKSPACEID maxWorkspace = 0;
- for (const auto& ws : g_pCompositor->m_vWorkspaces) {
- maxWorkspace = std::max(maxWorkspace, ws->m_iID);
- }
- workspaceIDRight = maxWorkspace + 1;
+ workspaceIDRight = getWorkspaceIDNameFromString("r+1").id;
}
auto PWORKSPACER = g_pCompositor->getWorkspaceByID(workspaceIDRight); // not guaranteed if PSWIPENEW || PSWIPENUMBER