summaryrefslogtreecommitdiff
path: root/src/layout/DwindleLayout.cpp
diff options
context:
space:
mode:
authorMaarten de Vries <maarten@de-vri.es>2024-04-17 13:04:16 +0200
committerGitHub <noreply@github.com>2024-04-17 12:04:16 +0100
commite57a2d7ec87ae775828ea8628ef4eeafce8e6e70 (patch)
tree45e5f30a7e463924a380bb3394ba314667efc7bc /src/layout/DwindleLayout.cpp
parente8e02e81e84bb04efa0c926361ec80c60744f665 (diff)
keybindmgr: add optional `silent` suffix to `movewindow`. (#5597)
With the `silent` suffix, the focus remains on the current position in the layout or the current monitor, instead of following the moved window. When combined with `movewindow mon:X`, this this allows you to get the same behavior as xmonad's `windowToScreen` command.
Diffstat (limited to 'src/layout/DwindleLayout.cpp')
-rw-r--r--src/layout/DwindleLayout.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/layout/DwindleLayout.cpp b/src/layout/DwindleLayout.cpp
index ea078349..711938e7 100644
--- a/src/layout/DwindleLayout.cpp
+++ b/src/layout/DwindleLayout.cpp
@@ -897,11 +897,13 @@ SWindowRenderLayoutHints CHyprDwindleLayout::requestRenderHints(CWindow* pWindow
return hints;
}
-void CHyprDwindleLayout::moveWindowTo(CWindow* pWindow, const std::string& dir) {
+void CHyprDwindleLayout::moveWindowTo(CWindow* pWindow, const std::string& dir, bool silent) {
if (!isDirection(dir))
return;
- const auto PNODE = getNodeFromWindow(pWindow);
+ const auto PNODE = getNodeFromWindow(pWindow);
+ const int originalWorkspaceID = pWindow->workspaceID();
+ const Vector2D originalPos = pWindow->middle();
if (!PNODE)
return;
@@ -934,6 +936,13 @@ void CHyprDwindleLayout::moveWindowTo(CWindow* pWindow, const std::string& dir)
onWindowCreatedTiling(pWindow);
m_vOverrideFocalPoint.reset();
+
+ // restore focus to the previous position
+ if (silent) {
+ const auto PNODETOFOCUS = getClosestNodeOnWorkspace(originalWorkspaceID, originalPos);
+ if (PNODETOFOCUS && PNODETOFOCUS->pWindow)
+ g_pCompositor->focusWindow(PNODETOFOCUS->pWindow);
+ }
}
void CHyprDwindleLayout::switchWindows(CWindow* pWindow, CWindow* pWindow2) {