diff options
author | Simon Zeni <simon@bl4ckb0ne.ca> | 2022-03-02 15:11:25 -0500 |
---|---|---|
committer | Kirill Primak <vyivel@eclair.cafe> | 2022-03-07 16:37:41 +0000 |
commit | a5b032cb1e9a3510d7722640a8970532be4d7b57 (patch) | |
tree | 631a51d53ebbb3b988bfe7c6934206d13b8e7f6b /backend/libinput/tablet_pad.c | |
parent | 0d2be496a899a0c6736dc504ba482e647bd3aa03 (diff) |
interface/wlr_tablet_pad: rework destroy sequence
The destroy callback in wlr_tablet_pad_impl has been removed. The function
`wlr_tablet_pad_finish` has been introduced to clean up the resources owned by a
wlr_tablet_pad.
`wlr_input_device_destroy` no longer destroys the wlr_tablet_pad, attempting to
destroy a wlr_tablet_pad will result in a no-op.
The field `name` has been added to the wlr_tablet_pad_impl to be able to identify
a given wlr_tablet_pad device.
Diffstat (limited to 'backend/libinput/tablet_pad.c')
-rw-r--r-- | backend/libinput/tablet_pad.c | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/backend/libinput/tablet_pad.c b/backend/libinput/tablet_pad.c index ba988557..87abd454 100644 --- a/backend/libinput/tablet_pad.c +++ b/backend/libinput/tablet_pad.c @@ -8,6 +8,10 @@ #include "backend/libinput.h" #include "util/signal.h" +const struct wlr_tablet_pad_impl libinput_tablet_pad_impl = { + .name = "libinput-tablet-pad", +}; + static void group_destroy(struct wlr_tablet_pad_group *group) { free(group->buttons); free(group->strips); @@ -15,7 +19,6 @@ static void group_destroy(struct wlr_tablet_pad_group *group) { free(group); } -// FIXME: Decide on how to alloc/count here static void add_pad_group_from_libinput(struct wlr_tablet_pad *pad, struct libinput_device *device, unsigned int index) { struct libinput_tablet_pad_mode_group *li_group = @@ -88,27 +91,6 @@ group_fail: group_destroy(group); } -static void tablet_pad_destroy(struct wlr_tablet_pad *wlr_tablet_pad) { - struct wlr_libinput_input_device *dev = - device_from_tablet_pad(wlr_tablet_pad); - - struct wlr_tablet_pad_group *group, *tmp; - wl_list_for_each_safe(group, tmp, &wlr_tablet_pad->groups, link) { - group_destroy(group); - } - - int groups = libinput_device_tablet_pad_get_num_mode_groups(dev->handle); - for (int i = 0; i < groups; ++i) { - struct libinput_tablet_pad_mode_group *li_group = - libinput_device_tablet_pad_get_mode_group(dev->handle, i); - libinput_tablet_pad_mode_group_unref(li_group); - } -} - -const struct wlr_tablet_pad_impl libinput_tablet_pad_impl = { - .destroy = tablet_pad_destroy, -}; - void init_device_tablet_pad(struct wlr_libinput_input_device *dev) { struct libinput_device *handle = dev->handle; const char *name = libinput_device_get_name(handle); @@ -134,6 +116,22 @@ void init_device_tablet_pad(struct wlr_libinput_input_device *dev) { } } +void finish_device_tablet_pad(struct wlr_libinput_input_device *dev) { + struct wlr_tablet_pad_group *group, *tmp; + wl_list_for_each_safe(group, tmp, &dev->tablet_pad.groups, link) { + group_destroy(group); + } + + wlr_tablet_pad_finish(&dev->tablet_pad); + + int groups = libinput_device_tablet_pad_get_num_mode_groups(dev->handle); + for (int i = 0; i < groups; ++i) { + struct libinput_tablet_pad_mode_group *li_group = + libinput_device_tablet_pad_get_mode_group(dev->handle, i); + libinput_tablet_pad_mode_group_unref(li_group); + } +} + struct wlr_libinput_input_device *device_from_tablet_pad( struct wlr_tablet_pad *wlr_tablet_pad) { assert(wlr_tablet_pad->impl == &libinput_tablet_pad_impl); |