From 452a7e6905de61f076065ef4c294dc62f86327ae Mon Sep 17 00:00:00 2001 From: normaltaro <30935678+normaltaro@users.noreply.github.com> Date: Sat, 14 Dec 2024 01:58:57 +0530 Subject: dispatchers: Add an option to prioritize focus change within groups with movefocus (#8601) * modified movefocus dispatcher to prioritize focus change within groups * pass clang-format check * `movefocus` cycling groups set optional to config bool `movefocus_cycles_groupfirst` * Update ConfigDescriptions.hpp --- src/managers/KeybindManager.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/managers/KeybindManager.cpp') diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index 67c2c5d0..8afa330b 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -1374,6 +1374,7 @@ SDispatchResult CKeybindManager::moveActiveToWorkspaceSilent(std::string args) { SDispatchResult CKeybindManager::moveFocusTo(std::string args) { static auto PFULLCYCLE = CConfigValue("binds:movefocus_cycles_fullscreen"); static auto PMONITORFALLBACK = CConfigValue("binds:window_direction_monitor_fallback"); + static auto PGROUPCYCLE = CConfigValue("binds:movefocus_cycles_groupfirst"); char arg = args[0]; if (!isDirection(args)) { @@ -1393,6 +1394,21 @@ SDispatchResult CKeybindManager::moveFocusTo(std::string args) { (arg == 'd' || arg == 'b' || arg == 'r' ? g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW, true) : g_pCompositor->getPrevWindowOnWorkspace(PLASTWINDOW, true)) : g_pCompositor->getWindowInDirection(PLASTWINDOW, arg); + // Prioritize focus change within groups if the window is a part of it. + if (*PGROUPCYCLE) { + if (!PLASTWINDOW->m_sGroupData.pNextWindow.expired()) { + if (arg == 'l' && PLASTWINDOW != PLASTWINDOW->getGroupHead()) { + PLASTWINDOW->setGroupCurrent(PLASTWINDOW->getGroupPrevious()); + return {}; + } + + else if (arg == 'r' && PLASTWINDOW != PLASTWINDOW->getGroupTail()) { + PLASTWINDOW->setGroupCurrent(PLASTWINDOW->m_sGroupData.pNextWindow.lock()); + return {}; + } + } + } + // Found window in direction, switch to it if (PWINDOWTOCHANGETO) { switchToWindow(PWINDOWTOCHANGETO); -- cgit v1.2.3