From 7dc4a3ecd71cf41dd1800c6afd3b16c83a90f031 Mon Sep 17 00:00:00 2001 From: Simon Zeni Date: Tue, 1 Mar 2022 14:49:30 -0500 Subject: 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. --- backend/libinput/events.c | 2 +- backend/libinput/keyboard.c | 6 +----- backend/wayland/seat.c | 15 +++++++++++++-- backend/x11/backend.c | 5 +++-- backend/x11/input_device.c | 6 +----- 5 files changed, 19 insertions(+), 15 deletions(-) (limited to 'backend') diff --git a/backend/libinput/events.c b/backend/libinput/events.c index af5bb184..af54177c 100644 --- a/backend/libinput/events.c +++ b/backend/libinput/events.c @@ -15,7 +15,7 @@ void destroy_libinput_input_device(struct wlr_libinput_input_device *dev) { if (dev->keyboard.impl) { - wlr_keyboard_destroy(&dev->keyboard); + wlr_keyboard_finish(&dev->keyboard); } if (dev->pointer.impl) { wlr_pointer_destroy(&dev->pointer); diff --git a/backend/libinput/keyboard.c b/backend/libinput/keyboard.c index cf6b9836..210fd450 100644 --- a/backend/libinput/keyboard.c +++ b/backend/libinput/keyboard.c @@ -17,12 +17,8 @@ static void keyboard_set_leds(struct wlr_keyboard *wlr_kb, uint32_t leds) { libinput_device_led_update(dev->handle, leds); } -static void keyboard_destroy(struct wlr_keyboard *wlr_kb) { - /* wlr_keyboard belongs to the wlr_libinput_input_device */ -} - const struct wlr_keyboard_impl libinput_keyboard_impl = { - .destroy = keyboard_destroy, + .name = "libinput-keyboard", .led_update = keyboard_set_leds }; diff --git a/backend/wayland/seat.c b/backend/wayland/seat.c index 28466bb3..e2a61bd4 100644 --- a/backend/wayland/seat.c +++ b/backend/wayland/seat.c @@ -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); diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 64bcf475..dbbd74e8 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -185,7 +185,7 @@ static void backend_destroy(struct wlr_backend *backend) { wlr_output_destroy(&output->wlr_output); } - wlr_keyboard_destroy(&x11->keyboard); + wlr_keyboard_finish(&x11->keyboard); wlr_backend_finish(backend); @@ -637,7 +637,8 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display, } #endif - wlr_keyboard_init(&x11->keyboard, &x11_keyboard_impl, "x11-keyboard"); + wlr_keyboard_init(&x11->keyboard, &x11_keyboard_impl, + x11_keyboard_impl.name); x11->display_destroy.notify = handle_display_destroy; wl_display_add_destroy_listener(display, &x11->display_destroy); diff --git a/backend/x11/input_device.c b/backend/x11/input_device.c index f87f53a0..3bbbe594 100644 --- a/backend/x11/input_device.c +++ b/backend/x11/input_device.c @@ -285,12 +285,8 @@ void handle_x11_xinput_event(struct wlr_x11_backend *x11, } } -static void keyboard_destroy(struct wlr_keyboard *wlr_keyboard) { - // Don't free the keyboard, it's on the stack -} - const struct wlr_keyboard_impl x11_keyboard_impl = { - .destroy = keyboard_destroy, + .name = "x11-keyboard", }; static void pointer_destroy(struct wlr_pointer *wlr_pointer) { -- cgit v1.2.3