From 4ae4f24ef773dcb1f7a841d31f70e6900670158e Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Thu, 30 May 2013 13:58:45 +1000 Subject: [PATCH] Update the MT state properly Signed-off-by: Peter Hutterer --- libevdev/libevdev-int.h | 1 + libevdev/libevdev.c | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/libevdev/libevdev-int.h b/libevdev/libevdev-int.h index 4e394d0..7b28884 100644 --- a/libevdev/libevdev-int.h +++ b/libevdev/libevdev-int.h @@ -64,6 +64,7 @@ struct libevdev { struct input_absinfo abs_info[ABS_CNT]; unsigned int mt_slot_vals[MAX_SLOTS][ABS_MT_CNT]; int num_slots; /**< valid slots in mt_slot_vals */ + int current_slot; int need_sync; int grabbed; diff --git a/libevdev/libevdev.c b/libevdev/libevdev.c index 173f33c..40bbe37 100644 --- a/libevdev/libevdev.c +++ b/libevdev/libevdev.c @@ -150,6 +150,7 @@ libevdev_new(int fd) dev = calloc(1, sizeof(*dev)); dev->num_slots = -1; + dev->current_slot = -1; dev->log = libevdev_noop_log_func; if (fd >= 0) @@ -237,8 +238,10 @@ libevdev_set_fd(struct libevdev* dev, int fd) if (rc < 0) goto out; - if (i == ABS_MT_SLOT) + if (i == ABS_MT_SLOT) { dev->num_slots = abs_info.maximum + 1; /* FIXME: non-zero min? */ + dev->current_slot = abs_info.value; + } } } @@ -439,6 +442,20 @@ update_key_state(struct libevdev *dev, const struct input_event *e) } static int +update_mt_state(struct libevdev *dev, const struct input_event *e) +{ + if (e->code == ABS_MT_SLOT) { + dev->current_slot = e->value; + return 0; + } else if (dev->current_slot == -1) + return 1; + + dev->mt_slot_vals[dev->current_slot][e->code - ABS_MT_MIN] = e->value; + + return 0; +} + +static int update_abs_state(struct libevdev *dev, const struct input_event *e) { if (!libevdev_has_event_type(dev, EV_ABS)) @@ -447,6 +464,9 @@ update_abs_state(struct libevdev *dev, const struct input_event *e) if (e->code > ABS_MAX) return 1; + if (e->code >= ABS_MT_MIN && e->code <= ABS_MT_MAX) + return update_mt_state(dev, e); + dev->abs_info[e->code].value = e->value; return 0; -- 2.7.4