From d556fa17321040e2813582a0231c1c8328f964eb Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Sun, 18 Apr 2010 16:25:54 +0200 Subject: Only emit multi-finger button events for real button events The current implementation will emit additional multi-finger click events if, for instance, one finger is removed before releasing the button. This patch makes sure logical buttons events are only emitted as a result of a real button event. Signed-off-by: Henrik Rydberg --- src/gestures.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/gestures.c b/src/gestures.c index 36d49f4..7346043 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -159,15 +159,19 @@ static void extract_buttons(struct Gestures *gs, struct MTouch* mt) if (mt->mem.npoint == 3) btdata = BITMASK(MT_BUTTON_MIDDLE); } - gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); - gs->btdata = btdata; - mt->mem.btdata = btdata; + if (mt->state.button != mt->prev_state.button) { + gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); + gs->btdata = btdata; + mt->mem.btdata = btdata; + } } /******************************************************/ static void extract_type(struct Gestures *gs, struct MTouch* mt) { + if (gs->btmask) + SETBIT(gs->type, GS_BUTTON); if (gs->dx || gs->dy) { if (mt->mem.npoint == 1) SETBIT(gs->type, GS_MOVE); -- cgit v1.2.3