diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2018-05-02 13:59:00 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2018-05-02 13:59:00 +1000 |
commit | 1e88664d958a000ac610ae9000459c461ba45bd8 (patch) | |
tree | e5c5a5b54d43c31a7861520d8b422ee18a61e178 | |
parent | d84e0035d12a9655c09a6e8c619b1144be42c90c (diff) |
Use the libinput touch count to init the right number of touches
Initial version by Johannes Pointner <h4nn35.work@gmail.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | configure.ac | 12 | ||||
-rw-r--r-- | src/xf86libinput.c | 10 |
2 files changed, 20 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac index 5892c5e..9c7174c 100644 --- a/configure.ac +++ b/configure.ac @@ -47,11 +47,11 @@ XORG_DEFAULT_OPTIONS PKG_CHECK_MODULES(XORG, [xorg-server >= 1.10] xproto [inputproto >= 2.2]) PKG_CHECK_MODULES(LIBINPUT, [libinput >= 1.4.901]) -AC_MSG_CHECKING([if libinput_device_config_accel_set_curve_point is available]) OLD_LIBS=$LIBS OLD_CFLAGS=$CFLAGS LIBS="$LIBS $LIBINPUT_LIBS" CFLAGS="$CFLAGS $LIBINPUT_CFLAGS" +AC_MSG_CHECKING([if libinput_device_config_accel_set_curve_point is available]) AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include <libinput.h>]], [[libinput_device_config_accel_set_curve_point(NULL, 0, 0)]])], @@ -61,6 +61,16 @@ AC_LINK_IFELSE( [libinput_have_custom_accel_curve=yes]], [AC_MSG_RESULT([no]) [libinput_have_custom_accel_curve=no]]) +AC_MSG_CHECKING([if libinput_device_touch_get_touch_count is available]) +AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include <libinput.h>]], + [[libinput_device_touch_get_touch_count(NULL)]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_LIBINPUT_TOUCH_COUNT, [1], + [libinput_device_touch_get_touch_count() is available]) + [libinput_have_touch_count=yes]], + [AC_MSG_RESULT([no]) + [libinput_have_touch_count=no]]) LIBS=$OLD_LIBS CFLAGS=$OLD_CFLAGS diff --git a/src/xf86libinput.c b/src/xf86libinput.c index 4a1b9e6..180907e 100644 --- a/src/xf86libinput.c +++ b/src/xf86libinput.c @@ -1095,11 +1095,13 @@ xf86libinput_init_touch(InputInfoPtr pInfo) { DeviceIntPtr dev = pInfo->dev; struct xf86libinput *driver_data = pInfo->private; + struct libinput_device *device = driver_data->shared_device->device; int min, max, res; unsigned char btnmap[MAX_BUTTONS + 1]; Atom btnlabels[MAX_BUTTONS]; Atom axislabels[TOUCHPAD_NUM_AXES]; int nbuttons = 7; + int ntouches = TOUCH_MAX_SLOTS; init_button_map(btnmap, ARRAY_SIZE(btnmap)); init_button_labels(btnlabels, ARRAY_SIZE(btnlabels)); @@ -1123,7 +1125,13 @@ xf86libinput_init_touch(InputInfoPtr pInfo) xf86InitValuatorAxisStruct(dev, 1, XIGetKnownProperty(AXIS_LABEL_PROP_ABS_MT_POSITION_Y), min, max, res * 1000, 0, res * 1000, Absolute); - InitTouchClassDeviceStruct(dev, TOUCH_MAX_SLOTS, XIDirectTouch, 2); + +#if HAVE_LIBINPUT_TOUCH_COUNT + ntouches = libinput_device_touch_get_touch_count(device); + if (ntouches == 0) /* unknown - mtdev */ + ntouches = TOUCH_MAX_SLOTS; +#endif + InitTouchClassDeviceStruct(dev, ntouches, XIDirectTouch, 2); } |