summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/touch-caps.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/touch-caps.c b/src/touch-caps.c
index a51912c..f99b0d7 100644
--- a/src/touch-caps.c
+++ b/src/touch-caps.c
@@ -48,17 +48,25 @@ int touch_caps_is_supported(struct touch_dev *dev, int fd)
48{ 48{
49 unsigned long keybits[nlongs(KEY_MAX)]; 49 unsigned long keybits[nlongs(KEY_MAX)];
50 unsigned long absbits[nlongs(ABS_MAX)]; 50 unsigned long absbits[nlongs(ABS_MAX)];
51 unsigned long relbits[nlongs(REL_CNT)];
51 int rc; 52 int rc;
52 53
53 if (dev->mtdev.caps.has_mtdata)
54 return 1;
55
56 SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits)); 54 SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(keybits)), keybits));
57 if (rc < 0) 55 if (rc < 0)
58 return 0; 56 return 0;
59 SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits)); 57 SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits));
60 if (rc < 0) 58 if (rc < 0)
61 return 0; 59 return 0;
60 SYSCALL(rc = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relbits)), relbits));
61 if (rc < 0)
62 return 0;
63
64 /* only support pure absolute devices at this time */
65 if (getbit(relbits, REL_X) || getbit(relbits, REL_Y))
66 return 0;
67
68 if (dev->mtdev.caps.has_mtdata)
69 return 1;
62 70
63 return getbit(absbits, ABS_X) && 71 return getbit(absbits, ABS_X) &&
64 getbit(absbits, ABS_Y) && 72 getbit(absbits, ABS_Y) &&