From b9dda43c04904f54c4b9dcaf6c7d02827b03d45d Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 7 Feb 2014 13:48:06 +1000 Subject: [PATCH] touchpad: mark which events are currently pending processing Signed-off-by: Peter Hutterer --- src/evdev-mt-touchpad.c | 6 ++++++ src/evdev-mt-touchpad.h | 9 +++++++++ 2 files changed, 15 insertions(+) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 8a8586a..1d34df8 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -151,6 +151,7 @@ tp_begin_touch(struct tp_dispatch *tp, struct tp_touch *t) t->state = TOUCH_BEGIN; tp->nfingers_down++; assert(tp->nfingers_down >= 1); + tp->queued |= TOUCHPAD_EVENT_MOTION; } } @@ -164,6 +165,7 @@ tp_end_touch(struct tp_dispatch *tp, struct tp_touch *t) t->state = TOUCH_END; assert(tp->nfingers_down >= 1); tp->nfingers_down--; + tp->queued |= TOUCHPAD_EVENT_MOTION; } static double @@ -203,11 +205,13 @@ tp_process_absolute(struct tp_dispatch *tp, t->x = e->value; t->millis = time; t->dirty = true; + tp->queued |= TOUCHPAD_EVENT_MOTION; break; case ABS_MT_POSITION_Y: t->y = e->value; t->millis = time; t->dirty = true; + tp->queued |= TOUCHPAD_EVENT_MOTION; break; case ABS_MT_SLOT: tp->slot = e->value; @@ -270,6 +274,8 @@ tp_post_process_state(struct tp_dispatch *tp, uint32_t time) t->dirty = false; } + + tp->queued = TOUCHPAD_EVENT_NONE; } static void diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h index f7f413b..52ad3ab 100644 --- a/src/evdev-mt-touchpad.h +++ b/src/evdev-mt-touchpad.h @@ -31,6 +31,13 @@ #define TOUCHPAD_HISTORY_LENGTH 4 +enum touchpad_event { + TOUCHPAD_EVENT_NONE = 0, + TOUCHPAD_EVENT_MOTION = (1 << 0), + TOUCHPAD_EVENT_BUTTON_PRESS = (1 << 1), + TOUCHPAD_EVENT_BUTTON_RELEASE = (1 << 2), +}; + enum touch_state { TOUCH_NONE = 0, TOUCH_BEGIN, @@ -83,6 +90,8 @@ struct tp_dispatch { double min_factor; double max_factor; } accel; + + enum touchpad_event queued; }; #define tp_for_each_touch(_tp, _t) \ -- 2.7.4