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) | |
| download | wlroots-a5b032cb1e9a3510d7722640a8970532be4d7b57.tar.xz | |
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); | 
