Skip to content

Commit

Permalink
Fixed bug where a Logitech wireless keyboard with built-in mouse touc…
Browse files Browse the repository at this point in the history
…hpad didn't get recongized as both devices.
  • Loading branch information
slouken committed Oct 6, 2013
1 parent 5296642 commit 90a219a
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 188 deletions.
32 changes: 13 additions & 19 deletions src/core/linux/SDL_udev.c
Expand Up @@ -279,7 +279,7 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
{
const char *subsystem;
const char *val = NULL;
SDL_UDEV_deviceclass devclass = 0;
int devclass = 0;
const char *path;
SDL_UDEV_CallbackList *item;

Expand All @@ -291,32 +291,26 @@ device_event(SDL_UDEV_deviceevent type, struct udev_device *dev)
subsystem = _this->udev_device_get_subsystem(dev);
if (SDL_strcmp(subsystem, "sound") == 0) {
devclass = SDL_UDEV_DEVICE_SOUND;
}
else if (SDL_strcmp(subsystem, "input") == 0) {
} else if (SDL_strcmp(subsystem, "input") == 0) {
val = _this->udev_device_get_property_value(dev, "ID_INPUT_JOYSTICK");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass = SDL_UDEV_DEVICE_JOYSTICK;
devclass |= SDL_UDEV_DEVICE_JOYSTICK;
}

if (devclass == 0) {
val = _this->udev_device_get_property_value(dev, "ID_INPUT_MOUSE");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass = SDL_UDEV_DEVICE_MOUSE;
}
val = _this->udev_device_get_property_value(dev, "ID_INPUT_MOUSE");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass |= SDL_UDEV_DEVICE_MOUSE;
}

if (devclass == 0) {
val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass = SDL_UDEV_DEVICE_KEYBOARD;
}

val = _this->udev_device_get_property_value(dev, "ID_INPUT_KEYBOARD");
if (val != NULL && SDL_strcmp(val, "1") == 0 ) {
devclass |= SDL_UDEV_DEVICE_KEYBOARD;
}

if (devclass == 0) {
return;
}
}
else {
} else {
return;
}

Expand Down Expand Up @@ -401,4 +395,4 @@ SDL_UDEV_DelCallback(SDL_UDEV_Callback cb)
}


#endif /* SDL_USE_LIBUDEV */
#endif /* SDL_USE_LIBUDEV */
13 changes: 7 additions & 6 deletions src/core/linux/SDL_udev.h
Expand Up @@ -46,15 +46,16 @@ typedef enum
SDL_UDEV_DEVICEREMOVED
} SDL_UDEV_deviceevent;

/* A device can be any combination of these classes */
typedef enum
{
SDL_UDEV_DEVICE_MOUSE = 0x0001,
SDL_UDEV_DEVICE_KEYBOARD,
SDL_UDEV_DEVICE_JOYSTICK,
SDL_UDEV_DEVICE_SOUND
SDL_UDEV_DEVICE_MOUSE = 0x0001,
SDL_UDEV_DEVICE_KEYBOARD = 0x0002,
SDL_UDEV_DEVICE_JOYSTICK = 0x0004,
SDL_UDEV_DEVICE_SOUND = 0x0008
} SDL_UDEV_deviceclass;

typedef void (*SDL_UDEV_Callback)(SDL_UDEV_deviceevent udev_type, SDL_UDEV_deviceclass udev_class, const char *devpath);
typedef void (*SDL_UDEV_Callback)(SDL_UDEV_deviceevent udev_type, int udev_class, const char *devpath);

typedef struct SDL_UDEV_CallbackList {
SDL_UDEV_Callback callback;
Expand Down Expand Up @@ -111,4 +112,4 @@ extern void SDL_UDEV_DelCallback(SDL_UDEV_Callback cb);

#endif /* HAVE_LIBUDEV_H */

#endif /* _SDL_udev_h */
#endif /* _SDL_udev_h */

0 comments on commit 90a219a

Please sign in to comment.