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.
This commit is contained in:
Maarten de Vries
2024-04-17 13:04:16 +02:00
committed by GitHub
parent e8e02e81e8
commit e57a2d7ec8
6 changed files with 36 additions and 15 deletions

View File

@@ -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) {