diff options
author | Philip Damianik <[email protected]> | 2023-10-10 18:34:28 +0200 |
---|---|---|
committer | GitHub <[email protected]> | 2023-10-10 17:34:28 +0100 |
commit | ac1bd47653f7d07a77fb3e0e32c0863bb0dced2e (patch) | |
tree | b0ab120bd8807c5a5490a6ecd10d83fac5ed879e | |
parent | 8abb6e1cee3e967ff414af0d6a1a31ebced95f5b (diff) | |
download | Hyprland-ac1bd47653f7d07a77fb3e0e32c0863bb0dced2e.tar.gz Hyprland-ac1bd47653f7d07a77fb3e0e32c0863bb0dced2e.zip |
dispatchers: Add option to center the cursor on the focused window when switching workspaces (#3528)
* Add option for centering on workspace when switching workspace
* Add option for centering on workspace when switching workspace
---------
Co-authored-by: vaxerski <[email protected]>
-rw-r--r-- | src/config/ConfigManager.cpp | 1 | ||||
-rw-r--r-- | src/managers/KeybindManager.cpp | 11 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index f21ad9f3..4e039ee0 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -232,6 +232,7 @@ void CConfigManager::setDefaultVars() { configValues["binds:scroll_event_delay"].intValue = 300; configValues["binds:workspace_back_and_forth"].intValue = 0; configValues["binds:allow_workspace_cycles"].intValue = 0; + configValues["binds:workspace_center_on"].intValue = 1; configValues["binds:focus_preferred_method"].intValue = 0; configValues["binds:ignore_group_lock"].intValue = 0; diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp index c86804d6..eb100870 100644 --- a/src/managers/KeybindManager.cpp +++ b/src/managers/KeybindManager.cpp @@ -804,6 +804,7 @@ void CKeybindManager::changeworkspace(std::string args) { // the current workspace will instead switch to the previous. static auto* const PBACKANDFORTH = &g_pConfigManager->getConfigValuePtr("binds:workspace_back_and_forth")->intValue; static auto* const PALLOWWORKSPACECYCLES = &g_pConfigManager->getConfigValuePtr("binds:allow_workspace_cycles")->intValue; + static auto* const PWORKSPACECENTERON = &g_pConfigManager->getConfigValuePtr("binds:workspace_center_on")->intValue; const auto PMONITOR = g_pCompositor->m_pLastMonitor; const auto PCURRENTWORKSPACE = g_pCompositor->getWorkspaceByID(PMONITOR->activeWorkspace); @@ -863,9 +864,13 @@ void CKeybindManager::changeworkspace(std::string args) { PMONITORWORKSPACEOWNER->changeWorkspace(pWorkspaceToChangeTo, false, true); if (PMONITOR != PMONITORWORKSPACEOWNER) { - g_pCompositor->warpCursorTo(PMONITORWORKSPACEOWNER->middle()); - if (const auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow(); PLAST) + Vector2D middle = PMONITORWORKSPACEOWNER->middle(); + if (const auto PLAST = pWorkspaceToChangeTo->getLastFocusedWindow(); PLAST) { g_pCompositor->focusWindow(PLAST); + if (*PWORKSPACECENTERON == 1) + middle = PLAST->middle(); + } + g_pCompositor->warpCursorTo(middle); } if (BISWORKSPACECURRENT) { @@ -1083,7 +1088,7 @@ void CKeybindManager::swapActive(std::string args) { return; g_pLayoutManager->getCurrentLayout()->switchWindows(PLASTWINDOW, PWINDOWTOCHANGETO); - g_pCompositor->warpCursorTo(PLASTWINDOW->m_vRealPosition.vec() + PLASTWINDOW->m_vRealSize.vec() / 2.0); + g_pCompositor->warpCursorTo(PLASTWINDOW->middle()); } void CKeybindManager::moveActiveTo(std::string args) { |