From 5df970a69539b687e7adcf36f9b065d07fa86f9f Mon Sep 17 00:00:00 2001 From: Gabriel Jacobo Date: Thu, 16 Oct 2014 09:41:42 -0300 Subject: [PATCH] [udev] Fixes #2654, ID_INPUT_KEY devices are ignored. Also added some references to udev code where these flags are set. --- src/core/linux/SDL_udev.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/core/linux/SDL_udev.c b/src/core/linux/SDL_udev.c index 31b8f5fd2..585018381 100644 --- a/src/core/linux/SDL_udev.c +++ b/src/core/linux/SDL_udev.c @@ -398,6 +398,8 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) if (SDL_strcmp(subsystem, "sound") == 0) { devclass = SDL_UDEV_DEVICE_SOUND; } else if (SDL_strcmp(subsystem, "input") == 0) { + /* udev rules reference: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c */ + val = _this->udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK"); if (val != NULL && SDL_strcmp(val, "1") == 0 ) { devclass |= SDL_UDEV_DEVICE_JOYSTICK; @@ -408,7 +410,13 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev) devclass |= SDL_UDEV_DEVICE_MOUSE; } - val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD"); + /* The undocumented rule is: + - All devices with keys get ID_INPUT_KEY + - From this subset, if they have ESC, numbers, and Q to D, it also gets ID_INPUT_KEYBOARD + + Ref: http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-input_id.c#n183 + */ + val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEY"); if (val != NULL && SDL_strcmp(val, "1") == 0 ) { devclass |= SDL_UDEV_DEVICE_KEYBOARD; }