mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-23 21:35:58 +01:00
touch: make cancel functions take a wlr_seat_client
The surface argument is only used to obtain a wlr_seat_client and semantically makes no sense. The wl_touch.cancel event applies to all touch points and all surfaces of a client. I decided to make the functions accept a wlr_seat_client rather than a wl_client as it is directly available in the wlr_touch_point struct and simplifies the implementation.
This commit is contained in:
parent
2f3ea4590a
commit
34219b0334
2 changed files with 11 additions and 20 deletions
|
@ -137,7 +137,7 @@ struct wlr_touch_grab_interface {
|
||||||
void (*cancel)(struct wlr_seat_touch_grab *grab);
|
void (*cancel)(struct wlr_seat_touch_grab *grab);
|
||||||
// Send wl_touch.cancel
|
// Send wl_touch.cancel
|
||||||
void (*wl_cancel)(struct wlr_seat_touch_grab *grab,
|
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
|
* 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
|
* This function does not respect touch grabs: you probably want
|
||||||
* wlr_seat_touch_notify_cancel() instead.
|
* 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);
|
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.
|
* cancel processing it. Defers to any grab of the touch device.
|
||||||
*/
|
*/
|
||||||
void wlr_seat_touch_notify_cancel(struct wlr_seat *seat,
|
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);
|
void wlr_seat_touch_notify_frame(struct wlr_seat *seat);
|
||||||
|
|
||||||
|
|
|
@ -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,
|
static void default_touch_wl_cancel(struct wlr_seat_touch_grab *grab,
|
||||||
struct wlr_surface *surface) {
|
struct wlr_seat_client *seat_client) {
|
||||||
wlr_seat_touch_send_cancel(grab->seat, surface);
|
wlr_seat_touch_send_cancel(grab->seat, seat_client);
|
||||||
}
|
}
|
||||||
|
|
||||||
const struct wlr_touch_grab_interface default_touch_grab_impl = {
|
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,
|
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;
|
struct wlr_seat_touch_grab *grab = seat->touch_state.grab;
|
||||||
if (grab->interface->wl_cancel) {
|
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;
|
struct wlr_touch_point *point, *tmp;
|
||||||
wl_list_for_each_safe(point, tmp, &seat->touch_state.touch_points, link) {
|
wl_list_for_each_safe(point, tmp, &seat->touch_state.touch_points, link) {
|
||||||
if (point->client == seat_client) {
|
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) {
|
void wlr_seat_touch_send_cancel(struct wlr_seat *seat,
|
||||||
struct wl_client *client = wl_resource_get_client(surface->resource);
|
struct wlr_seat_client *seat_client) {
|
||||||
struct wlr_seat_client *seat_client = wlr_seat_client_for_wl_client(seat, client);
|
|
||||||
if (seat_client == NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct wl_resource *resource;
|
struct wl_resource *resource;
|
||||||
wl_resource_for_each(resource, &seat_client->touches) {
|
wl_resource_for_each(resource, &seat_client->touches) {
|
||||||
if (seat_client_from_touch_resource(resource) == NULL) {
|
if (seat_client_from_touch_resource(resource) == NULL) {
|
||||||
|
|
Loading…
Reference in a new issue