mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-12 16:35:58 +01:00
input/pointer: add wlr_seat_pointer_wrap
It allows a compositor to do things like skip motion events on pointer constraint unlock. References: https://github.com/swaywm/sway/pull/5431
This commit is contained in:
parent
6ef5d18757
commit
a145430afa
2 changed files with 14 additions and 6 deletions
|
@ -409,6 +409,12 @@ void wlr_seat_pointer_notify_enter(struct wlr_seat *wlr_seat,
|
|||
*/
|
||||
void wlr_seat_pointer_notify_clear_focus(struct wlr_seat *wlr_seat);
|
||||
|
||||
/**
|
||||
* Warp the pointer of this seat to the given surface-local coordinates, without
|
||||
* generating motion events.
|
||||
*/
|
||||
void wlr_seat_pointer_warp(struct wlr_seat *wlr_seat, double sx, double sy);
|
||||
|
||||
/**
|
||||
* Notify the seat of motion over the given surface. Pass surface-local
|
||||
* coordinates where the pointer motion occurred. Defers to any grab of the
|
||||
|
|
|
@ -199,11 +199,9 @@ void wlr_seat_pointer_enter(struct wlr_seat *wlr_seat,
|
|||
wlr_seat->pointer_state.focused_client = client;
|
||||
wlr_seat->pointer_state.focused_surface = surface;
|
||||
if (surface != NULL) {
|
||||
wlr_seat->pointer_state.sx = sx;
|
||||
wlr_seat->pointer_state.sy = sy;
|
||||
wlr_seat_pointer_warp(wlr_seat, sx, sy);
|
||||
} else {
|
||||
wlr_seat->pointer_state.sx = NAN;
|
||||
wlr_seat->pointer_state.sy = NAN;
|
||||
wlr_seat_pointer_warp(wlr_seat, NAN, NAN);
|
||||
}
|
||||
|
||||
struct wlr_seat_pointer_focus_change_event event = {
|
||||
|
@ -220,6 +218,11 @@ void wlr_seat_pointer_clear_focus(struct wlr_seat *wlr_seat) {
|
|||
wlr_seat_pointer_enter(wlr_seat, NULL, 0, 0);
|
||||
}
|
||||
|
||||
void wlr_seat_pointer_warp(struct wlr_seat *wlr_seat, double sx, double sy) {
|
||||
wlr_seat->pointer_state.sx = sx;
|
||||
wlr_seat->pointer_state.sy = sy;
|
||||
}
|
||||
|
||||
void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
|
||||
double sx, double sy) {
|
||||
struct wlr_seat_client *client = wlr_seat->pointer_state.focused_client;
|
||||
|
@ -241,8 +244,7 @@ void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
|
|||
wl_fixed_from_double(sy));
|
||||
}
|
||||
|
||||
wlr_seat->pointer_state.sx = sx;
|
||||
wlr_seat->pointer_state.sy = sy;
|
||||
wlr_seat_pointer_warp(wlr_seat, sx, sy);
|
||||
}
|
||||
|
||||
uint32_t wlr_seat_pointer_send_button(struct wlr_seat *wlr_seat, uint32_t time,
|
||||
|
|
Loading…
Reference in a new issue