[PATCH evdev 2/8] num_slots should take into account the .mtdev field
Benjamin Tissoires
benjamin.tissoires at gmail.com
Wed Jan 9 10:21:16 PST 2013
The current implementation assume that multitouch devices following the
Multitouch Protocol A (those requiring mtdev) present 10 touches,
no matter mtdev decides.
num_slots should be relying on mtdev when it is available.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires at gmail.com>
---
src/evdev.c | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/evdev.c b/src/evdev.c
index 27b0e76..93758fd 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -755,8 +755,14 @@ EvdevProcessTouch(InputInfoPtr pInfo)
static int
num_slots(EvdevPtr pEvdev)
{
- int value = pEvdev->absinfo[ABS_MT_SLOT].maximum -
+ int value = 0;
+
+ if (!pEvdev->mtdev)
+ value = pEvdev->absinfo[ABS_MT_SLOT].maximum -
pEvdev->absinfo[ABS_MT_SLOT].minimum + 1;
+ else if (pEvdev->mtdev->caps.slot.maximum > 0)
+ value = pEvdev->mtdev->caps.slot.maximum -
+ pEvdev->mtdev->caps.slot.minimum + 1;
/* If we don't know how many slots there are, assume at least 10 */
return value > 1 ? value : 10;
@@ -1385,14 +1391,10 @@ EvdevAddAbsValuatorClass(DeviceIntPtr device)
#ifdef MULTITOUCH
if (pEvdev->mtdev && num_mt_axes_total > 0)
{
- int num_touches = 0;
+ int num_touches = num_slots(pEvdev);
int mode = pEvdev->flags & EVDEV_TOUCHPAD ?
XIDependentTouch : XIDirectTouch;
- if (pEvdev->mtdev->caps.slot.maximum > 0)
- num_touches = pEvdev->mtdev->caps.slot.maximum -
- pEvdev->mtdev->caps.slot.minimum + 1;
-
if (!InitTouchClassDeviceStruct(device, num_touches, mode,
num_mt_axes_total)) {
xf86Msg(X_ERROR, "%s: failed to initialize touch class device.\n",
--
1.8.0.2
More information about the xorg-devel
mailing list