From 6eca02a0e7da78d8f951865ef3c3c2c0acb8cb95 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 23 Oct 2024 10:52:50 -0700 Subject: [PATCH] evdev: correctly handle composite devices These can be both mouse and keyboard and should be initialized and exposed to the application as both. --- src/core/linux/SDL_evdev.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/core/linux/SDL_evdev.c b/src/core/linux/SDL_evdev.c index c5b62ae780..e655eea6ef 100644 --- a/src/core/linux/SDL_evdev.c +++ b/src/core/linux/SDL_evdev.c @@ -933,14 +933,18 @@ static bool SDL_EVDEV_device_added(const char *dev_path, int udev_class) SDL_free(item); return false; } - } else if (udev_class & SDL_UDEV_DEVICE_MOUSE) { + } + + if (udev_class & SDL_UDEV_DEVICE_MOUSE) { if (!SDL_EVDEV_init_mouse(item, udev_class)) { close(item->fd); SDL_free(item->path); SDL_free(item); return false; } - } else if (udev_class & SDL_UDEV_DEVICE_KEYBOARD) { + } + + if (udev_class & SDL_UDEV_DEVICE_KEYBOARD) { if (!SDL_EVDEV_init_keyboard(item, udev_class)) { close(item->fd); SDL_free(item->path); @@ -981,11 +985,14 @@ static bool SDL_EVDEV_device_removed(const char *dev_path) if (item == _this->last) { _this->last = prev; } + if (item->is_touchscreen) { SDL_EVDEV_destroy_touchscreen(item); - } else if (item->udev_class & SDL_UDEV_DEVICE_MOUSE) { + } + if (item->udev_class & SDL_UDEV_DEVICE_MOUSE) { SDL_EVDEV_destroy_mouse(item); - } else if (item->udev_class & SDL_UDEV_DEVICE_KEYBOARD) { + } + if (item->udev_class & SDL_UDEV_DEVICE_KEYBOARD) { SDL_EVDEV_destroy_keyboard(item); } close(item->fd);