diff options
Diffstat (limited to 'src/managers/InputManager.cpp')
| -rw-r--r-- | src/managers/InputManager.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/managers/InputManager.cpp b/src/managers/InputManager.cpp index 20ee8041..10b1ad95 100644 --- a/src/managers/InputManager.cpp +++ b/src/managers/InputManager.cpp @@ -23,6 +23,7 @@ void CInputManager::mouseMoveUnified(uint32_t time) { // update stuff updateDragIcon(); + // focus wlr_surface* foundSurface = nullptr; Vector2D mouseCoords = getMouseCoordsInternal(); @@ -65,10 +66,11 @@ void CInputManager::mouseMoveUnified(uint32_t time) { foundSurface = g_pCompositor->vectorToLayerSurface(mouseCoords, &PMONITOR->m_aLayerSurfaceLists[ZWLR_LAYER_SHELL_V1_LAYER_TOP], &surfaceCoords); // then windows - const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowIdealExcludeWithSurface(mouseCoords, nullptr, &foundSurface); - - if (foundSurface && PWINDOWIDEAL) { - surfacePos = PWINDOWIDEAL->m_vRealPosition; + const auto PWINDOWIDEAL = g_pCompositor->vectorToWindowIdeal(mouseCoords); + if (!foundSurface && PWINDOWIDEAL) { + foundSurface = g_pXWaylandManager->getWindowSurface(PWINDOWIDEAL); + if (foundSurface) + surfacePos = PWINDOWIDEAL->m_vRealPosition; } // then surfaces below @@ -122,6 +124,8 @@ void CInputManager::onMouseButton(wlr_pointer_button_event* e) { break; } + refocus(); + // notify app if we didnt handle it if (g_pCompositor->doesSeatAcceptInput(g_pCompositor->m_pLastFocus)) { wlr_seat_pointer_notify_button(g_pCompositor->m_sSeat.seat, e->time_msec, e->button, e->state); |
