Treat devices as gamepads if they have a hat instead of an analog stick

Fixes #880
This commit is contained in:
Cameron Gutman 2024-02-18 14:56:57 -06:00
parent d6c9650a32
commit fc904d2dac

View File

@ -836,8 +836,10 @@ void evdev_create(const char* device, struct mapping* mappings, bool verbose, in
libevdev_has_event_code(evdev, EV_ABS, ABS_RZ))) && libevdev_has_event_code(evdev, EV_ABS, ABS_RZ))) &&
!libevdev_has_event_type(evdev, EV_KEY); !libevdev_has_event_type(evdev, EV_KEY);
bool is_gamepad = bool is_gamepad =
libevdev_has_event_code(evdev, EV_ABS, ABS_X) && ((libevdev_has_event_code(evdev, EV_ABS, ABS_X) &&
libevdev_has_event_code(evdev, EV_ABS, ABS_Y) && libevdev_has_event_code(evdev, EV_ABS, ABS_Y)) ||
(libevdev_has_event_code(evdev, EV_ABS, ABS_HAT0X) &&
libevdev_has_event_code(evdev, EV_ABS, ABS_HAT0Y))) &&
(libevdev_has_event_code(evdev, EV_KEY, BTN_TRIGGER) || (libevdev_has_event_code(evdev, EV_KEY, BTN_TRIGGER) ||
libevdev_has_event_code(evdev, EV_KEY, BTN_A) || libevdev_has_event_code(evdev, EV_KEY, BTN_A) ||
libevdev_has_event_code(evdev, EV_KEY, BTN_1) || libevdev_has_event_code(evdev, EV_KEY, BTN_1) ||