evdev: Report touchpad events with the correct device type

This commit is contained in:
Cameron Gutman 2022-07-31 14:18:33 -05:00
parent 9a33c62e13
commit a10c57dfe4
1 changed files with 6 additions and 9 deletions

View File

@ -229,11 +229,7 @@ static void SDL_EVDEV_udev_callback(SDL_UDEV_deviceevent udev_event, int udev_cl
switch(udev_event) { switch(udev_event) {
case SDL_UDEV_DEVICEADDED: case SDL_UDEV_DEVICEADDED:
if (udev_class & SDL_UDEV_DEVICE_TOUCHPAD) { if (!(udev_class & (SDL_UDEV_DEVICE_MOUSE | SDL_UDEV_DEVICE_KEYBOARD | SDL_UDEV_DEVICE_TOUCHSCREEN | SDL_UDEV_DEVICE_TOUCHPAD)))
udev_class |= SDL_UDEV_DEVICE_TOUCHSCREEN;
}
if (!(udev_class & (SDL_UDEV_DEVICE_MOUSE | SDL_UDEV_DEVICE_KEYBOARD | SDL_UDEV_DEVICE_TOUCHSCREEN)))
return; return;
if ((udev_class & SDL_UDEV_DEVICE_JOYSTICK)) if ((udev_class & SDL_UDEV_DEVICE_JOYSTICK))
@ -513,7 +509,7 @@ SDL_EVDEV_translate_keycode(int keycode)
#ifdef SDL_USE_LIBUDEV #ifdef SDL_USE_LIBUDEV
static int static int
SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item) SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item, int udev_class)
{ {
int ret, i; int ret, i;
unsigned long xreq, yreq; unsigned long xreq, yreq;
@ -600,7 +596,7 @@ SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item)
} }
ret = SDL_AddTouch(item->fd, /* I guess our fd is unique enough */ ret = SDL_AddTouch(item->fd, /* I guess our fd is unique enough */
SDL_TOUCH_DEVICE_DIRECT, (udev_class & SDL_UDEV_DEVICE_TOUCHPAD) ? SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE : SDL_TOUCH_DEVICE_DIRECT,
item->touchscreen_data->name); item->touchscreen_data->name);
if (ret < 0) { if (ret < 0) {
SDL_free(item->touchscreen_data->slots); SDL_free(item->touchscreen_data->slots);
@ -788,10 +784,11 @@ SDL_EVDEV_device_added(const char *dev_path, int udev_class)
item->high_res_hwheel = test_bit(REL_HWHEEL_HI_RES, relbit); item->high_res_hwheel = test_bit(REL_HWHEEL_HI_RES, relbit);
} }
if (udev_class & SDL_UDEV_DEVICE_TOUCHSCREEN) { /* For now, we just treat a touchpad like a touchscreen */
if (udev_class & (SDL_UDEV_DEVICE_TOUCHSCREEN | SDL_UDEV_DEVICE_TOUCHPAD)) {
item->is_touchscreen = SDL_TRUE; item->is_touchscreen = SDL_TRUE;
if ((ret = SDL_EVDEV_init_touchscreen(item)) < 0) { if ((ret = SDL_EVDEV_init_touchscreen(item, udev_class)) < 0) {
close(item->fd); close(item->fd);
SDL_free(item->path); SDL_free(item->path);
SDL_free(item); SDL_free(item);