diff options
Diffstat (limited to 'src/desktop/Window.cpp')
| -rw-r--r-- | src/desktop/Window.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 9f5f9dd3..c478b766 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -1356,7 +1356,7 @@ void CWindow::activate(bool force) { g_pCompositor->changeWindowZOrder(m_pSelf.lock(), true); g_pCompositor->focusWindow(m_pSelf.lock()); - g_pCompositor->warpCursorTo(middle()); + warpCursor(); } void CWindow::onUpdateState() { @@ -1530,3 +1530,14 @@ void CWindow::onX11Configure(CBox box) { g_pHyprRenderer->damageWindow(m_pSelf.lock()); } + +void CWindow::warpCursor() { + static auto PERSISTENTWARPS = CConfigValue<Hyprlang::INT>("cursor:persistent_warps"); + const auto coords = m_vRelativeCursorCoordsOnLastWarp; + m_vRelativeCursorCoordsOnLastWarp.x = -1; // reset m_vRelativeCursorCoordsOnLastWarp + + if (*PERSISTENTWARPS && coords.x > 0 && coords.y > 0 && coords < m_vSize) // don't warp cursor outside the window + g_pCompositor->warpCursorTo(m_vPosition + coords); + else + g_pCompositor->warpCursorTo(middle()); +} |
