diff --git a/include/wlr/types/wlr_seat.h b/include/wlr/types/wlr_seat.h index 0318b0f1..4d3aa574 100644 --- a/include/wlr/types/wlr_seat.h +++ b/include/wlr/types/wlr_seat.h @@ -137,7 +137,7 @@ struct wlr_touch_grab_interface { void (*cancel)(struct wlr_seat_touch_grab *grab); // Send wl_touch.cancel void (*wl_cancel)(struct wlr_seat_touch_grab *grab, - struct wlr_surface *surface); + struct wlr_seat_client *seat_client); }; /** @@ -632,11 +632,12 @@ void wlr_seat_touch_send_motion(struct wlr_seat *seat, uint32_t time_msec, /** * Notify the seat that this is a global gesture and the client should cancel - * processing it. The event will go to the client for the surface given. + * processing it. The event will go to the client given. * This function does not respect touch grabs: you probably want * wlr_seat_touch_notify_cancel() instead. */ -void wlr_seat_touch_send_cancel(struct wlr_seat *seat, struct wlr_surface *surface); +void wlr_seat_touch_send_cancel(struct wlr_seat *seat, + struct wlr_seat_client *seat_client); void wlr_seat_touch_send_frame(struct wlr_seat *seat); @@ -669,7 +670,7 @@ void wlr_seat_touch_notify_motion(struct wlr_seat *seat, uint32_t time_msec, * cancel processing it. Defers to any grab of the touch device. */ void wlr_seat_touch_notify_cancel(struct wlr_seat *seat, - struct wlr_surface *surface); + struct wlr_seat_client *seat_client); void wlr_seat_touch_notify_frame(struct wlr_seat *seat); diff --git a/types/seat/wlr_seat_touch.c b/types/seat/wlr_seat_touch.c index 5a140006..bffc5809 100644 --- a/types/seat/wlr_seat_touch.c +++ b/types/seat/wlr_seat_touch.c @@ -40,8 +40,8 @@ static void default_touch_cancel(struct wlr_seat_touch_grab *grab) { } static void default_touch_wl_cancel(struct wlr_seat_touch_grab *grab, - struct wlr_surface *surface) { - wlr_seat_touch_send_cancel(grab->seat, surface); + struct wlr_seat_client *seat_client) { + wlr_seat_touch_send_cancel(grab->seat, seat_client); } const struct wlr_touch_grab_interface default_touch_grab_impl = { @@ -242,17 +242,12 @@ void wlr_seat_touch_notify_frame(struct wlr_seat *seat) { } void wlr_seat_touch_notify_cancel(struct wlr_seat *seat, - struct wlr_surface *surface) { + struct wlr_seat_client *seat_client) { struct wlr_seat_touch_grab *grab = seat->touch_state.grab; if (grab->interface->wl_cancel) { - grab->interface->wl_cancel(grab, surface); + grab->interface->wl_cancel(grab, seat_client); } - struct wl_client *client = wl_resource_get_client(surface->resource); - struct wlr_seat_client *seat_client = wlr_seat_client_for_wl_client(seat, client); - if (seat_client == NULL) { - return; - } struct wlr_touch_point *point, *tmp; wl_list_for_each_safe(point, tmp, &seat->touch_state.touch_points, link) { if (point->client == seat_client) { @@ -399,13 +394,8 @@ void wlr_seat_touch_send_frame(struct wlr_seat *seat) { } } -void wlr_seat_touch_send_cancel(struct wlr_seat *seat, struct wlr_surface *surface) { - struct wl_client *client = wl_resource_get_client(surface->resource); - struct wlr_seat_client *seat_client = wlr_seat_client_for_wl_client(seat, client); - if (seat_client == NULL) { - return; - } - +void wlr_seat_touch_send_cancel(struct wlr_seat *seat, + struct wlr_seat_client *seat_client) { struct wl_resource *resource; wl_resource_for_each(resource, &seat_client->touches) { if (seat_client_from_touch_resource(resource) == NULL) {