From 7dfee50350180e38c7c02b79c5a3ee454dc552fd Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Tue, 1 Feb 2022 11:32:39 -0500 Subject: [PATCH] types/wlr_tablet_tool: add base wlr_input_device wlr_tablet_tool owns its wlr_input_device. It will be initialized when the tablet tool is initialized, and finished when the tablet tool is destroyed. --- backend/libinput/tablet_tool.c | 6 +++++- backend/wayland/tablet_v2.c | 2 +- include/wlr/interfaces/wlr_tablet_tool.h | 2 +- include/wlr/types/wlr_tablet_tool.h | 2 ++ types/wlr_tablet_tool.c | 8 +++++++- 5 files changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/libinput/tablet_tool.c b/backend/libinput/tablet_tool.c index 60208a87a..31803e810 100644 --- a/backend/libinput/tablet_tool.c +++ b/backend/libinput/tablet_tool.c @@ -75,7 +75,11 @@ struct wlr_tablet *create_libinput_tablet( } struct wlr_tablet *wlr_tablet = &libinput_tablet->wlr_tablet; - wlr_tablet_init(wlr_tablet, &tablet_impl); + const char *name = libinput_device_get_name(libinput_dev); + + wlr_tablet_init(wlr_tablet, &tablet_impl, name); + wlr_tablet->base.vendor = libinput_device_get_id_vendor(libinput_dev); + wlr_tablet->base.product = libinput_device_get_id_product(libinput_dev); struct udev_device *udev = libinput_device_get_udev_device(libinput_dev); char **dst = wl_array_add(&wlr_tablet->paths, sizeof(char *)); diff --git a/backend/wayland/tablet_v2.c b/backend/wayland/tablet_v2.c index 34056314b..4ddcce078 100644 --- a/backend/wayland/tablet_v2.c +++ b/backend/wayland/tablet_v2.c @@ -909,7 +909,7 @@ static void handle_tab_added(void *data, return; } zwp_tablet_v2_set_user_data(id, wlr_dev->tablet); - wlr_tablet_init(wlr_dev->tablet, NULL); + wlr_tablet_init(wlr_dev->tablet, NULL, wlr_dev->name); zwp_tablet_v2_add_listener(id, &tablet_listener, dev); } diff --git a/include/wlr/interfaces/wlr_tablet_tool.h b/include/wlr/interfaces/wlr_tablet_tool.h index 81e72d75e..de7430a2f 100644 --- a/include/wlr/interfaces/wlr_tablet_tool.h +++ b/include/wlr/interfaces/wlr_tablet_tool.h @@ -16,7 +16,7 @@ struct wlr_tablet_impl { }; void wlr_tablet_init(struct wlr_tablet *tablet, - const struct wlr_tablet_impl *impl); + const struct wlr_tablet_impl *impl, const char *name); void wlr_tablet_destroy(struct wlr_tablet *tablet); #endif diff --git a/include/wlr/types/wlr_tablet_tool.h b/include/wlr/types/wlr_tablet_tool.h index 75fc1ee80..b8b4000f7 100644 --- a/include/wlr/types/wlr_tablet_tool.h +++ b/include/wlr/types/wlr_tablet_tool.h @@ -60,6 +60,8 @@ struct wlr_tablet_tool { struct wlr_tablet_impl; struct wlr_tablet { + struct wlr_input_device base; + const struct wlr_tablet_impl *impl; struct { diff --git a/types/wlr_tablet_tool.c b/types/wlr_tablet_tool.c index 5c0037bd2..12278e938 100644 --- a/types/wlr_tablet_tool.c +++ b/types/wlr_tablet_tool.c @@ -1,11 +1,16 @@ #include #include #include +#include #include #include void wlr_tablet_init(struct wlr_tablet *tablet, - const struct wlr_tablet_impl *impl) { + const struct wlr_tablet_impl *impl, const char *name) { + wlr_input_device_init(&tablet->base, WLR_INPUT_DEVICE_TABLET_TOOL, NULL, + name); + tablet->base.tablet = tablet; + tablet->impl = impl; wl_signal_init(&tablet->events.axis); wl_signal_init(&tablet->events.proximity); @@ -25,6 +30,7 @@ void wlr_tablet_destroy(struct wlr_tablet *tablet) { } wl_array_release(&tablet->paths); + wlr_input_device_finish(&tablet->base); if (tablet->impl && tablet->impl->destroy) { tablet->impl->destroy(tablet); } else {