diff options
| author | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-30 12:18:39 +1000 |
|---|---|---|
| committer | Peter Hutterer <peter.hutterer@who-t.net> | 2013-05-30 13:25:44 +1000 |
| commit | 8034fdd0d7f6ca66b9d2e6b2c0a105ae6d373ebb (patch) | |
| tree | 042c27cf207247b4979ab4c6d922dae3764b13a6 /libevdev | |
| parent | a3255d3ec78c80918daac7f001dbb246a5970552 (diff) | |
| download | libevdev-8034fdd0d7f6ca66b9d2e6b2c0a105ae6d373ebb.tar.gz | |
Fix MT slot index handling
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'libevdev')
| -rw-r--r-- | libevdev/libevdev.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 70ca5de..2b9dd17 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -346,11 +346,13 @@ sync_mt_state(struct libevdev *dev) struct input_event ev; for (i = ABS_MT_MIN; i < ABS_MT_MAX; i++) { + int idx; if (i == ABS_MT_SLOT) continue; - mt_state[i].code = i; - rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[i]); + idx = i - ABS_MT_MIN; + mt_state[idx].code = i; + rc = ioctl(dev->fd, EVIOCGMTSLOTS(sizeof(struct mt_state)), &mt_state[idx]); if (rc < 0) goto out; } @@ -360,10 +362,12 @@ sync_mt_state(struct libevdev *dev) init_event(&ev, EV_ABS, ABS_MT_SLOT, i); dev->sync_callback(dev, &ev, dev->userdata); for (j = ABS_MT_MIN; j < ABS_MT_MAX; j++) { - if (dev->mt_slot_vals[i][j] != mt_state[j].val[i]) { - init_event(&ev, EV_ABS, j, mt_state[j].val[i]); + int jdx = j - ABS_MT_MIN; + + if (dev->mt_slot_vals[i][jdx] != mt_state[jdx].val[i]) { + init_event(&ev, EV_ABS, j, mt_state[jdx].val[i]); dev->sync_callback(dev, &ev, dev->userdata); - dev->mt_slot_vals[i][j] = mt_state[j].val[i]; + dev->mt_slot_vals[i][jdx] = mt_state[jdx].val[i]; } } } |
