aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornormaltaro <[email protected]>2024-12-14 01:58:57 +0530
committerGitHub <[email protected]>2024-12-13 21:28:57 +0100
commit452a7e6905de61f076065ef4c294dc62f86327ae (patch)
treec326c34f0cd9f0d61a99615556556640e029a787
parent61a51bb4ef5ff38a8482933da1756bf31d4475be (diff)
downloadHyprland-452a7e6905de61f076065ef4c294dc62f86327ae.tar.gz
Hyprland-452a7e6905de61f076065ef4c294dc62f86327ae.zip
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
-rw-r--r--src/config/ConfigDescriptions.hpp6
-rw-r--r--src/config/ConfigManager.cpp1
-rw-r--r--src/managers/KeybindManager.cpp16
3 files changed, 23 insertions, 0 deletions
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
index a9ac223a..6792a763 100644
--- a/src/config/ConfigDescriptions.hpp
+++ b/src/config/ConfigDescriptions.hpp
@@ -1201,6 +1201,12 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
.data = SConfigOptionDescription::SBoolData{true},
},
SConfigOptionDescription{
+ .value = "binds:movefocus_cycles_groupfirst",
+ .description = "If enabled, when in a grouped window, movefocus will cycle windows in the groups first, then at each ends of tabs, it'll move on to other windows/groups",
+ .type = CONFIG_OPTION_BOOL,
+ .data = SConfigOptionDescription::SBoolData{false},
+ },
+ SConfigOptionDescription{
.value = "binds:disable_keybind_grabbing",
.description = "If enabled, apps that request keybinds to be disabled (e.g. VMs) will not be able to do so.",
.type = CONFIG_OPTION_BOOL,
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index b53ed4d9..b80fd427 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -544,6 +544,7 @@ CConfigManager::CConfigManager() {
m_pConfig->addConfigValue("binds:focus_preferred_method", Hyprlang::INT{0});
m_pConfig->addConfigValue("binds:ignore_group_lock", Hyprlang::INT{0});
m_pConfig->addConfigValue("binds:movefocus_cycles_fullscreen", Hyprlang::INT{1});
+ m_pConfig->addConfigValue("binds:movefocus_cycles_groupfirst", Hyprlang::INT{0});
m_pConfig->addConfigValue("binds:disable_keybind_grabbing", Hyprlang::INT{0});
m_pConfig->addConfigValue("binds:window_direction_monitor_fallback", Hyprlang::INT{1});
m_pConfig->addConfigValue("binds:allow_pin_fullscreen", Hyprlang::INT{0});
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<Hyprlang::INT>("binds:movefocus_cycles_fullscreen");
static auto PMONITORFALLBACK = CConfigValue<Hyprlang::INT>("binds:window_direction_monitor_fallback");
+ static auto PGROUPCYCLE = CConfigValue<Hyprlang::INT>("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);