From 79da4c175eca6f2db5e167a9e3c40ef343d6cd87 Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Sat, 28 Apr 2018 12:47:28 +0100
Subject: backend/headless: remove useless destructor

---
 backend/headless/input_device.c | 10 +---------
 backend/libinput/keyboard.c     |  4 +++-
 backend/x11/backend.c           | 11 +++--------
 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) {
-- 
cgit v1.2.3