mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-29 16:05:59 +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);
|
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
|
* Notify the seat of motion over the given surface. Pass surface-local
|
||||||
* coordinates where the pointer motion occurred. Defers to any grab of the
|
* 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_client = client;
|
||||||
wlr_seat->pointer_state.focused_surface = surface;
|
wlr_seat->pointer_state.focused_surface = surface;
|
||||||
if (surface != NULL) {
|
if (surface != NULL) {
|
||||||
wlr_seat->pointer_state.sx = sx;
|
wlr_seat_pointer_warp(wlr_seat, sx, sy);
|
||||||
wlr_seat->pointer_state.sy = sy;
|
|
||||||
} else {
|
} else {
|
||||||
wlr_seat->pointer_state.sx = NAN;
|
wlr_seat_pointer_warp(wlr_seat, NAN, NAN);
|
||||||
wlr_seat->pointer_state.sy = NAN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct wlr_seat_pointer_focus_change_event event = {
|
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);
|
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,
|
void wlr_seat_pointer_send_motion(struct wlr_seat *wlr_seat, uint32_t time,
|
||||||
double sx, double sy) {
|
double sx, double sy) {
|
||||||
struct wlr_seat_client *client = wlr_seat->pointer_state.focused_client;
|
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));
|
wl_fixed_from_double(sy));
|
||||||
}
|
}
|
||||||
|
|
||||||
wlr_seat->pointer_state.sx = sx;
|
wlr_seat_pointer_warp(wlr_seat, sx, sy);
|
||||||
wlr_seat->pointer_state.sy = sy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t wlr_seat_pointer_send_button(struct wlr_seat *wlr_seat, uint32_t time,
|
uint32_t wlr_seat_pointer_send_button(struct wlr_seat *wlr_seat, uint32_t time,
|
||||||
|
|
Loading…
Reference in a new issue