From 6b51f3b57a211c5a1ae326596aa82f5a4d0eec9d Mon Sep 17 00:00:00 2001 From: Markus Ongyerth Date: Fri, 1 Jun 2018 12:33:19 +0200 Subject: [PATCH] use previous resource versions and destroy pads --- include/wlr/types/wlr_tablet_v2.h | 4 ++-- types/tablet_v2/wlr_tablet_v2_pad.c | 19 ++++++++++++++----- types/tablet_v2/wlr_tablet_v2_tablet.c | 8 ++++++-- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/include/wlr/types/wlr_tablet_v2.h b/include/wlr/types/wlr_tablet_v2.h index 872bb425..3818132c 100644 --- a/include/wlr/types/wlr_tablet_v2.h +++ b/include/wlr/types/wlr_tablet_v2.h @@ -38,7 +38,7 @@ struct wlr_tablet_v2_tablet { struct wlr_tablet_v2_tablet_tool { struct wl_list link; // wlr_tablet_seat_v2::tablets struct wlr_tablet_tool_tool *wlr_tool; - struct wl_list clients; // wlr_tablet_tool_client_v2::tablet_link + struct wl_list clients; // wlr_tablet_tool_client_v2::tool_link struct wl_listener tool_destroy; @@ -62,7 +62,7 @@ struct wlr_tablet_v2_tablet_pad { struct wl_list link; // wlr_tablet_seat_v2::pads struct wlr_tablet_pad *wlr_pad; struct wlr_input_device *wlr_device; - struct wl_list clients; // wlr_tablet_pad_client_v2::tablet_link + struct wl_list clients; // wlr_tablet_pad_client_v2::pad_link size_t group_count; uint32_t *groups; diff --git a/types/tablet_v2/wlr_tablet_v2_pad.c b/types/tablet_v2/wlr_tablet_v2_pad.c index f86dd77e..154e6434 100644 --- a/types/tablet_v2/wlr_tablet_v2_pad.c +++ b/types/tablet_v2/wlr_tablet_v2_pad.c @@ -86,7 +86,7 @@ static void handle_tablet_pad_ring_v2_set_feedback(struct wl_client *client, .serial = serial, .description = description, .index = aux->index - }; + }; wl_signal_emit(&aux->pad->pad->events.ring_feedback, &evt); } @@ -185,8 +185,11 @@ static struct zwp_tablet_pad_group_v2_interface tablet_pad_group_impl = { static void add_tablet_pad_group(struct wlr_tablet_v2_tablet_pad *pad, struct wlr_tablet_pad_client_v2 *client, struct wlr_tablet_pad_group *group, size_t index) { + + int version = wl_resource_get_version(client->resource); client->groups[index] = - wl_resource_create(client->client, &zwp_tablet_pad_group_v2_interface, 1, 0); + wl_resource_create(client->client, &zwp_tablet_pad_group_v2_interface, + version, 0); if (!client->groups[index]) { wl_client_post_no_memory(client->client); return; @@ -194,6 +197,7 @@ static void add_tablet_pad_group(struct wlr_tablet_v2_tablet_pad *pad, struct tablet_pad_auxiliary_user_data *user_data = calloc(1, sizeof(struct tablet_pad_auxiliary_user_data)); if (!user_data) { + wl_client_post_no_memory(client->client); return; } user_data->pad = client; @@ -338,6 +342,14 @@ static void handle_wlr_tablet_pad_destroy(struct wl_listener *listener, void *da } } + struct wlr_tablet_pad_client_v2 *client; + struct wlr_tablet_pad_client_v2 *tmp_client; + wl_list_for_each_safe(client, tmp_client, &pad->clients, pad_link) { + zwp_tablet_pad_v2_send_removed(client->resource); + destroy_tablet_pad_v2(client->resource); + + } + wl_list_remove(&pad->clients); wl_list_remove(&pad->link); wl_list_remove(&pad->pad_destroy.link); @@ -437,9 +449,6 @@ uint32_t wlr_send_tablet_v2_tablet_pad_enter( pad->current_client = pad_client; - /* Pre-increment keeps 0 clean. wraparound would be after 2^32 - * proximity_in. Someone wants to do the math how long that would take? - */ uint32_t serial = wl_display_next_serial(wl_client_get_display(client)); zwp_tablet_pad_v2_send_enter(pad_client->resource, serial, diff --git a/types/tablet_v2/wlr_tablet_v2_tablet.c b/types/tablet_v2/wlr_tablet_v2_tablet.c index 5ddbcbf6..3fc6f8b2 100644 --- a/types/tablet_v2/wlr_tablet_v2_tablet.c +++ b/types/tablet_v2/wlr_tablet_v2_tablet.c @@ -2,7 +2,6 @@ #define _POSIX_C_SOURCE 200809L #endif -#include "tablet-unstable-v2-protocol.h" #include #include #include @@ -11,6 +10,8 @@ #include #include +#include "tablet-unstable-v2-protocol.h" + void destroy_tablet_v2(struct wl_resource *resource) { struct wlr_tablet_client_v2 *tablet = tablet_client_from_resource(resource); @@ -92,9 +93,12 @@ void add_tablet_client(struct wlr_tablet_seat_client_v2 *seat, return; } + int version = wl_resource_get_version(seat->resource); client->resource = - wl_resource_create(seat->wl_client, &zwp_tablet_v2_interface, 1, 0); + wl_resource_create(seat->wl_client, &zwp_tablet_v2_interface, + version, 0); if (!client->resource) { + wl_resource_post_no_memory(seat->resource); free(client); return; }