wlr-seat: touch grab begin and end
This commit is contained in:
parent
469729d3af
commit
cbb6fd7352
|
@ -175,6 +175,9 @@ struct wlr_seat {
|
||||||
struct wl_signal keyboard_grab_begin;
|
struct wl_signal keyboard_grab_begin;
|
||||||
struct wl_signal keyboard_grab_end;
|
struct wl_signal keyboard_grab_end;
|
||||||
|
|
||||||
|
struct wl_signal touch_grab_begin;
|
||||||
|
struct wl_signal touch_grab_end;
|
||||||
|
|
||||||
struct wl_signal request_set_cursor;
|
struct wl_signal request_set_cursor;
|
||||||
|
|
||||||
struct wl_signal selection;
|
struct wl_signal selection;
|
||||||
|
@ -371,6 +374,19 @@ void wlr_seat_keyboard_enter(struct wlr_seat *wlr_seat,
|
||||||
*/
|
*/
|
||||||
void wlr_seat_keyboard_clear_focus(struct wlr_seat *wlr_seat);
|
void wlr_seat_keyboard_clear_focus(struct wlr_seat *wlr_seat);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start a grab of the touch device of this seat. The grabber is responsible for
|
||||||
|
* handling all touch events until the grab ends.
|
||||||
|
*/
|
||||||
|
void wlr_seat_touch_start_grab(struct wlr_seat *wlr_seat,
|
||||||
|
struct wlr_seat_touch_grab *grab);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* End the grab of the touch device of this seat. This reverts the grab back to
|
||||||
|
* the default grab for the touch device.
|
||||||
|
*/
|
||||||
|
void wlr_seat_touch_end_grab(struct wlr_seat *wlr_seat);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the active touch point with the given `touch_id`. If the touch point does
|
* Get the active touch point with the given `touch_id`. If the touch point does
|
||||||
* not exist or is no longer active, returns NULL.
|
* not exist or is no longer active, returns NULL.
|
||||||
|
|
|
@ -407,6 +407,9 @@ struct wlr_seat *wlr_seat_create(struct wl_display *display, const char *name) {
|
||||||
wl_signal_init(&wlr_seat->events.keyboard_grab_begin);
|
wl_signal_init(&wlr_seat->events.keyboard_grab_begin);
|
||||||
wl_signal_init(&wlr_seat->events.keyboard_grab_end);
|
wl_signal_init(&wlr_seat->events.keyboard_grab_end);
|
||||||
|
|
||||||
|
wl_signal_init(&wlr_seat->events.touch_grab_begin);
|
||||||
|
wl_signal_init(&wlr_seat->events.touch_grab_end);
|
||||||
|
|
||||||
return wlr_seat;
|
return wlr_seat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -867,6 +870,26 @@ void wlr_seat_keyboard_notify_key(struct wlr_seat *seat, uint32_t time,
|
||||||
grab->interface->key(grab, time, key, state);
|
grab->interface->key(grab, time, key, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wlr_seat_touch_start_grab(struct wlr_seat *wlr_seat,
|
||||||
|
struct wlr_seat_touch_grab *grab) {
|
||||||
|
grab->seat = wlr_seat;
|
||||||
|
wlr_seat->touch_state.grab = grab;
|
||||||
|
|
||||||
|
wl_signal_emit(&wlr_seat->events.touch_grab_begin, grab);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wlr_seat_touch_end_grab(struct wlr_seat *wlr_seat) {
|
||||||
|
struct wlr_seat_touch_grab *grab = wlr_seat->touch_state.grab;
|
||||||
|
|
||||||
|
if (grab != wlr_seat->touch_state.default_grab) {
|
||||||
|
wlr_seat->touch_state.grab = wlr_seat->touch_state.default_grab;
|
||||||
|
wl_signal_emit(&wlr_seat->events.touch_grab_end, grab);
|
||||||
|
if (grab->interface->cancel) {
|
||||||
|
grab->interface->cancel(grab);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void touch_point_destroy(struct wlr_touch_point *point) {
|
static void touch_point_destroy(struct wlr_touch_point *point) {
|
||||||
wl_list_remove(&point->surface_destroy.link);
|
wl_list_remove(&point->surface_destroy.link);
|
||||||
wl_list_remove(&point->resource_destroy.link);
|
wl_list_remove(&point->resource_destroy.link);
|
||||||
|
|
Loading…
Reference in New Issue