diff options
-rw-r--r-- | backend/headless/input_device.c | 10 | ||||
-rw-r--r-- | backend/libinput/keyboard.c | 4 | ||||
-rw-r--r-- | backend/x11/backend.c | 11 | ||||
-rw-r--r-- | types/wlr_keyboard.c | 8 |
4 files changed, 11 insertions, 22 deletions
diff --git a/backend/headless/input_device.c b/backend/headless/input_device.c index daa22436..a1e18428 100644 --- a/backend/headless/input_device.c +++ b/backend/headless/input_device.c @@ -9,15 +9,7 @@ #include "backend/headless.h" #include "util/signal.h" -static void input_device_destroy(struct wlr_input_device *wlr_dev) { - struct wlr_headless_input_device *device = - (struct wlr_headless_input_device *)wlr_dev; - free(device); -} - -static const struct wlr_input_device_impl input_device_impl = { - .destroy = input_device_destroy, -}; +static const struct wlr_input_device_impl input_device_impl = { 0 }; bool wlr_input_device_is_headless(struct wlr_input_device *wlr_dev) { return wlr_dev->impl == &input_device_impl; diff --git a/backend/libinput/keyboard.c b/backend/libinput/keyboard.c index d8dd8878..e17191e3 100644 --- a/backend/libinput/keyboard.c +++ b/backend/libinput/keyboard.c @@ -13,7 +13,8 @@ struct wlr_libinput_keyboard { }; static void keyboard_set_leds(struct wlr_keyboard *wlr_kb, uint32_t leds) { - struct wlr_libinput_keyboard *wlr_libinput_kb = (struct wlr_libinput_keyboard *)wlr_kb; + struct wlr_libinput_keyboard *wlr_libinput_kb = + (struct wlr_libinput_keyboard *)wlr_kb; libinput_device_led_update(wlr_libinput_kb->libinput_dev, leds); } @@ -21,6 +22,7 @@ static void keyboard_destroy(struct wlr_keyboard *wlr_kb) { struct wlr_libinput_keyboard *wlr_libinput_kb = (struct wlr_libinput_keyboard *)wlr_kb; libinput_device_unref(wlr_libinput_kb->libinput_dev); + free(wlr_libinput_kb); } struct wlr_keyboard_impl impl = { diff --git a/backend/x11/backend.c b/backend/x11/backend.c index 35d037b0..f64515ca 100644 --- a/backend/x11/backend.c +++ b/backend/x11/backend.c @@ -223,14 +223,9 @@ static void backend_destroy(struct wlr_backend *backend) { wlr_signal_emit_safe(&x11->pointer_dev.events.destroy, &x11->pointer_dev); wlr_signal_emit_safe(&x11->keyboard_dev.events.destroy, &x11->keyboard_dev); - // TODO probably need to use wlr_keyboard_destroy, but the devices need to - // be malloced for that to work - if (x11->keyboard_dev.keyboard->keymap) { - xkb_keymap_unref(x11->keyboard_dev.keyboard->keymap); - } - if (x11->keyboard_dev.keyboard->xkb_state) { - xkb_state_unref(x11->keyboard_dev.keyboard->xkb_state); - } + + wlr_input_device_destroy(&x11->keyboard_dev); + wlr_input_device_destroy(&x11->pointer_dev); wlr_signal_emit_safe(&backend->events.destroy, backend); diff --git a/types/wlr_keyboard.c b/types/wlr_keyboard.c index 8a5bd7e2..1d173d7a 100644 --- a/types/wlr_keyboard.c +++ b/types/wlr_keyboard.c @@ -154,15 +154,15 @@ void wlr_keyboard_destroy(struct wlr_keyboard *kb) { if (kb == NULL) { return; } + xkb_state_unref(kb->xkb_state); + xkb_keymap_unref(kb->keymap); + close(kb->keymap_fd); if (kb->impl && kb->impl->destroy) { kb->impl->destroy(kb); } else { wl_list_remove(&kb->events.key.listener_list); + free(kb); } - xkb_state_unref(kb->xkb_state); - xkb_keymap_unref(kb->keymap); - close(kb->keymap_fd); - free(kb); } void wlr_keyboard_led_update(struct wlr_keyboard *kb, uint32_t leds) { |