From b3c30a78f593b19a5f3ccc06ba78376de9410795 Mon Sep 17 00:00:00 2001 From: Jiajian Wu Date: Mon, 5 Feb 2024 16:49:12 +0800 Subject: [PATCH] src: core: linux: SDL_evdev: Double check multitouch device Signed-off-by: Jiajian Wu --- src/core/linux/SDL_evdev.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/core/linux/SDL_evdev.c b/src/core/linux/SDL_evdev.c index 208b3c1..d52c8c2 100644 --- a/src/core/linux/SDL_evdev.c +++ b/src/core/linux/SDL_evdev.c @@ -553,6 +553,27 @@ SDL_EVDEV_init_touchscreen(SDL_evdevlist_item* item) item->touchscreen_data->max_y = abs_info.maximum; item->touchscreen_data->range_y = abs_info.maximum - abs_info.minimum; + /* HACK: Fixup for fake MT device */ + if (item->touchscreen_data->max_slots == 1) + { + xreq = EVIOCGABS(ABS_MT_POSITION_X); + yreq = EVIOCGABS(ABS_MT_POSITION_Y); + + ret = ioctl(item->fd, xreq, &abs_info); + if (ret >= 0) { + item->touchscreen_data->min_x = abs_info.minimum; + item->touchscreen_data->max_x = abs_info.maximum; + item->touchscreen_data->range_x = abs_info.maximum - abs_info.minimum; + } + + ret = ioctl(item->fd, yreq, &abs_info); + if (ret >= 0) { + item->touchscreen_data->min_y = abs_info.minimum; + item->touchscreen_data->max_y = abs_info.maximum; + item->touchscreen_data->range_y = abs_info.maximum - abs_info.minimum; + } + } + ret = ioctl(item->fd, EVIOCGABS(ABS_MT_PRESSURE), &abs_info); if (ret < 0) { SDL_free(item->touchscreen_data->name); -- 2.25.1