diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-10 14:43:46 +0000 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-12-10 14:43:46 +0000 |
| commit | 62f4503f07066762af9546bb4a2acdd58b72d4bf (patch) | |
| tree | 3396c1fbab98f3d6fa231b0733796c5469f01c59 /src/events/Devices.cpp | |
| parent | bf78dcecf092fc10df75ce869306ddabf8ecd640 (diff) | |
handle constraint cursor hints better
Diffstat (limited to 'src/events/Devices.cpp')
| -rw-r--r-- | src/events/Devices.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/events/Devices.cpp b/src/events/Devices.cpp index 6ab23a67..146c8c54 100644 --- a/src/events/Devices.cpp +++ b/src/events/Devices.cpp @@ -110,6 +110,11 @@ void Events::listener_newConstraint(wl_listener* listener, void* data) { if (g_pCompositor->m_pLastFocus == PCONSTRAINT->surface) { g_pInputManager->constrainMouse(CONSTRAINT->pMouse, PCONSTRAINT); + + if (!CONSTRAINT->hintSet) { + const auto PWINDOW = g_pCompositor->getConstraintWindow(g_pCompositor->m_sSeat.mouse); + CONSTRAINT->positionHint = g_pInputManager->getMouseCoordsInternal() - PWINDOW->m_vRealPosition.goalv(); + } } } @@ -124,14 +129,14 @@ void Events::listener_destroyConstraint(void* owner, void* data) { if (PWINDOW) { if (PWINDOW->m_bIsX11) { wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, - PCONSTRAINT->constraint->current.cursor_hint.x + PWINDOW->m_uSurface.xwayland->x, PWINDOW->m_uSurface.xwayland->y + PCONSTRAINT->constraint->current.cursor_hint.y); + PCONSTRAINT->positionHint.x + PWINDOW->m_uSurface.xwayland->x, PWINDOW->m_uSurface.xwayland->y + PCONSTRAINT->positionHint.y); - wlr_seat_pointer_warp(PCONSTRAINT->constraint->seat, PCONSTRAINT->constraint->current.cursor_hint.x, PCONSTRAINT->constraint->current.cursor_hint.y); + wlr_seat_pointer_warp(PCONSTRAINT->constraint->seat, PCONSTRAINT->positionHint.x, PCONSTRAINT->positionHint.y); } else { wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, - PCONSTRAINT->constraint->current.cursor_hint.x + PWINDOW->m_vRealPosition.vec().x, PCONSTRAINT->constraint->current.cursor_hint.y + PWINDOW->m_vRealPosition.vec().y); + PCONSTRAINT->positionHint.x + PWINDOW->m_vRealPosition.vec().x, PCONSTRAINT->positionHint.y + PWINDOW->m_vRealPosition.vec().y); - wlr_seat_pointer_warp(PCONSTRAINT->constraint->seat, PCONSTRAINT->constraint->current.cursor_hint.x, PCONSTRAINT->constraint->current.cursor_hint.y); + wlr_seat_pointer_warp(PCONSTRAINT->constraint->seat, PCONSTRAINT->positionHint.x, PCONSTRAINT->positionHint.y); } } |
