mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-16 08:56:26 -05:00
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:
parent
39b68ea47a
commit
7dc4a3ecd7
10 changed files with 52 additions and 73 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue