diff --git a/src/managers/input/InputManager.cpp b/src/managers/input/InputManager.cpp index 98662d120..3655d8e76 100644 --- a/src/managers/input/InputManager.cpp +++ b/src/managers/input/InputManager.cpp @@ -183,7 +183,7 @@ void CInputManager::sendMotionEventsToFocused() { g_pSeatManager->setPointerFocus(Desktop::focusState()->surface(), LOCAL); } -void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, std::optional overridePos) { +void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, std::optional overridePos, std::optional monitor) { m_lastInputMouse = mouse; if (!g_pCompositor->m_readyToProcess || g_pCompositor->m_isShuttingDown || g_pCompositor->m_unsafeState) @@ -224,7 +224,7 @@ void CInputManager::mouseMoveUnified(uint32_t time, bool refocus, bool mouse, st m_lastCursorPosFloored = MOUSECOORDSFLOORED; - const auto PMONITOR = isLocked() && Desktop::focusState()->monitor() ? Desktop::focusState()->monitor() : g_pCompositor->getMonitorFromCursor(); + const auto PMONITOR = monitor ? monitor.value() : isLocked() && Desktop::focusState()->monitor() ? Desktop::focusState()->monitor() : g_pCompositor->getMonitorFromCursor(); // this can happen if there are no displays hooked up to Hyprland if (PMONITOR == nullptr) @@ -1547,8 +1547,8 @@ bool CInputManager::shouldIgnoreVirtualKeyboard(SP pKeyboard) { return DISALLOWACTION; } -void CInputManager::refocus(std::optional overridePos) { - mouseMoveUnified(0, true, false, overridePos); +void CInputManager::refocus(std::optional overridePos, std::optional monitor) { + mouseMoveUnified(0, true, false, overridePos, monitor); } bool CInputManager::refocusLastWindow(PHLMONITOR pMonitor) { diff --git a/src/managers/input/InputManager.hpp b/src/managers/input/InputManager.hpp index c3d6ac2f5..4f8eda98a 100644 --- a/src/managers/input/InputManager.hpp +++ b/src/managers/input/InputManager.hpp @@ -117,7 +117,7 @@ class CInputManager { bool isLocked(); Vector2D getMouseCoordsInternal(); - void refocus(std::optional overridePos = std::nullopt); + void refocus(std::optional overridePos = std::nullopt, std::optional monitor = std::nullopt); bool refocusLastWindow(PHLMONITOR pMonitor); void simulateMouseMovement(); void sendMotionEventsToFocused(); @@ -244,12 +244,12 @@ class CInputManager { uint32_t m_capabilities = 0; - void mouseMoveUnified(uint32_t, bool refocus = false, bool mouse = false, std::optional overridePos = std::nullopt); - void recheckMouseWarpOnMouseInput(); + void mouseMoveUnified(uint32_t, bool refocus = false, bool mouse = false, std::optional overridePos = std::nullopt, std::optional monitor = std::nullopt); + void recheckMouseWarpOnMouseInput(); - SP ensureTabletToolPresent(SP); + SP ensureTabletToolPresent(SP); - void applyConfigToKeyboard(SP); + void applyConfigToKeyboard(SP); // this will be set after a refocus() WP m_foundSurfaceToFocus; diff --git a/src/managers/input/Touch.cpp b/src/managers/input/Touch.cpp index 196300a2d..e2cb79837 100644 --- a/src/managers/input/Touch.cpp +++ b/src/managers/input/Touch.cpp @@ -30,7 +30,7 @@ void CInputManager::onTouchDown(ITouch::SDownEvent e) { const auto TOUCH_COORDS = PMONITOR->m_position + (e.pos * PMONITOR->m_size); - refocus(TOUCH_COORDS); + refocus(TOUCH_COORDS, PMONITOR); if (m_clickBehavior == CLICKMODE_KILL) { IPointer::SButtonEvent e;