interface/wlr_keyboard: rework destroy sequence

The destroy member in wlr_keyboard_impl has been removed. The function
`wlr_keyboard_finish` has been introduce to clean up the resources owned by a
wlr_keyboard.

`wlr_input_device_destroy` no longer destroys the wlr_keyboard, attempting to
destroy a wlr_keyboard will result in a no-op.

The field `name` has been added to the wlr_keyboard_impl to be able to identify
a given wlr_keyboard device.
This commit is contained in:
Simon Zeni 2022-03-01 14:49:30 -05:00 committed by Kirill Primak
parent 39b68ea47a
commit 7dc4a3ecd7
10 changed files with 52 additions and 73 deletions

View file

@ -24,7 +24,9 @@
#include "util/time.h"
static const struct wlr_pointer_impl pointer_impl;
static const struct wlr_keyboard_impl keyboard_impl;
static const struct wlr_keyboard_impl keyboard_impl = {
.name = "wl-keyboard",
};
static const struct wlr_touch_impl touch_impl;
static struct wlr_wl_pointer *output_get_pointer(
@ -506,7 +508,16 @@ void destroy_wl_input_device(struct wlr_wl_input_device *dev) {
*/
wlr_input_device_finish(&dev->wlr_input_device);
if (dev->wlr_input_device._device) {
wlr_input_device_destroy(&dev->wlr_input_device);
struct wlr_input_device *wlr_dev = &dev->wlr_input_device;
switch (wlr_dev->type) {
case WLR_INPUT_DEVICE_KEYBOARD:
wlr_keyboard_finish(wlr_dev->keyboard);
free(wlr_dev->keyboard);
break;
default:
wlr_input_device_destroy(wlr_dev);
break;
}
}
wl_list_remove(&dev->link);
free(dev);