From bf843fc6adf90d43a5dd7742e9df61d395ba780d Mon Sep 17 00:00:00 2001 From: James Satterfield <4368972+jsatterfield@users.noreply.github.com> Date: Wed, 27 Aug 2025 15:05:58 -0500 Subject: [PATCH] scrolling: Add warpCursorTo for all layout move/focus operations (#461) --- hyprscrolling/Scrolling.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hyprscrolling/Scrolling.cpp b/hyprscrolling/Scrolling.cpp index 1e11ea8..4e878dc 100644 --- a/hyprscrolling/Scrolling.cpp +++ b/hyprscrolling/Scrolling.cpp @@ -796,6 +796,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin DATA->recalculate(); g_pCompositor->focusWindow(COL->windowDatas.front()->window.lock()); + g_pCompositor->warpCursorTo(COL->windowDatas.front()->window.lock()->middle()); return {}; } else if (ARGS[1] == "-col") { @@ -805,6 +806,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin DATA->centerCol(DATA->columns.back()); DATA->recalculate(); g_pCompositor->focusWindow((DATA->columns.back()->windowDatas.back())->window.lock()); + g_pCompositor->warpCursorTo((DATA->columns.back()->windowDatas.back())->window.lock()->middle()); } return {}; @@ -818,6 +820,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin DATA->recalculate(); g_pCompositor->focusWindow(COL->windowDatas.back()->window.lock()); + g_pCompositor->warpCursorTo(COL->windowDatas.front()->window.lock()->middle()); return {}; } @@ -1064,6 +1067,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin } g_pCompositor->focusWindow(PREV->window.lock()); + g_pCompositor->warpCursorTo(PREV->window.lock()->middle()); break; } @@ -1078,6 +1082,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin } g_pCompositor->focusWindow(NEXT->window.lock()); + g_pCompositor->warpCursorTo(NEXT->window.lock()->middle()); break; } @@ -1087,6 +1092,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin if (*PNOFALLBACK) { centerOrFit(WDATA->column->workspace.lock(), WDATA->column.lock()); WDATA->column->workspace->recalculate(); + g_pCompositor->warpCursorTo(WDATA->window.lock()->middle()); break; } else PREV = WDATA->column->workspace->columns.back(); @@ -1095,6 +1101,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin g_pCompositor->focusWindow(PREV->windowDatas.front()->window.lock()); centerOrFit(WDATA->column->workspace.lock(), PREV); WDATA->column->workspace->recalculate(); + g_pCompositor->warpCursorTo(PREV->windowDatas.front()->window.lock()->middle()); break; } @@ -1104,6 +1111,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin if (*PNOFALLBACK) { centerOrFit(WDATA->column->workspace.lock(), WDATA->column.lock()); WDATA->column->workspace->recalculate(); + g_pCompositor->warpCursorTo(WDATA->window.lock()->middle()); break; } else NEXT = WDATA->column->workspace->columns.front(); @@ -1112,6 +1120,7 @@ std::any CScrollingLayout::layoutMessage(SLayoutMessageHeader header, std::strin g_pCompositor->focusWindow(NEXT->windowDatas.front()->window.lock()); centerOrFit(WDATA->column->workspace.lock(), NEXT); WDATA->column->workspace->recalculate(); + g_pCompositor->warpCursorTo(NEXT->windowDatas.front()->window.lock()->middle()); break; } @@ -1192,6 +1201,7 @@ void CScrollingLayout::moveWindowTo(PHLWINDOW w, const std::string& dir, bool si DATA->column->down(DATA); WS->recalculate(); + g_pCompositor->warpCursorTo(w->middle()); } void CScrollingLayout::alterSplitRatio(PHLWINDOW, float, bool) {