binds: cycle within group on single monitor if no window found in the argument direction. (#8714)

This commit is contained in:
normaltaro 2024-12-17 21:42:38 +05:30 committed by GitHub
parent c7d9719910
commit bd7092a9fe
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1395,19 +1395,18 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) {
g_pCompositor->getWindowInDirection(PLASTWINDOW, arg); g_pCompositor->getWindowInDirection(PLASTWINDOW, arg);
// Prioritize focus change within groups if the window is a part of it. // Prioritize focus change within groups if the window is a part of it.
if (*PGROUPCYCLE) { if (*PGROUPCYCLE && PLASTWINDOW->m_sGroupData.pNextWindow) {
if (!PLASTWINDOW->m_sGroupData.pNextWindow.expired()) { auto isTheOnlyGroupOnWs = !PWINDOWTOCHANGETO && g_pCompositor->m_vMonitors.size() == 1;
if (arg == 'l' && PLASTWINDOW != PLASTWINDOW->getGroupHead()) { if (arg == 'l' && (PLASTWINDOW != PLASTWINDOW->getGroupHead() || isTheOnlyGroupOnWs)) {
PLASTWINDOW->setGroupCurrent(PLASTWINDOW->getGroupPrevious()); PLASTWINDOW->setGroupCurrent(PLASTWINDOW->getGroupPrevious());
return {}; return {};
} }
else if (arg == 'r' && PLASTWINDOW != PLASTWINDOW->getGroupTail()) { else if (arg == 'r' && (PLASTWINDOW != PLASTWINDOW->getGroupTail() || isTheOnlyGroupOnWs)) {
PLASTWINDOW->setGroupCurrent(PLASTWINDOW->m_sGroupData.pNextWindow.lock()); PLASTWINDOW->setGroupCurrent(PLASTWINDOW->m_sGroupData.pNextWindow.lock());
return {}; return {};
} }
} }
}
// Found window in direction, switch to it // Found window in direction, switch to it
if (PWINDOWTOCHANGETO) { if (PWINDOWTOCHANGETO) {