From 030f4fdbe44d1af41c55cdda5baf71ba3225829f Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Sat, 10 Apr 2010 23:18:02 +0200 Subject: Keep logical buttons separate from the hardware ones The button extraction currently modifies the MTState buttons, upsetting the semantics in a bad way. This patch adds the logical button state to the Memory structure, and uses it to compute the logical button change. Signed-off-by: Henrik Rydberg --- src/gestures.c | 12 ++++++++---- src/memory.c | 1 + src/memory.h | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/gestures.c b/src/gestures.c index c837d6c..e032214 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -50,16 +50,20 @@ static void extract_movement(struct Gestures *gs, struct MTouch* mt) static void extract_buttons(struct Gestures *gs, struct MTouch* mt) { + unsigned btdata = mt->state.button & BITONES(DIM_BUTTON); if (mt->state.button == BITMASK(MT_BUTTON_LEFT)) { if (mt->state.nfinger == 2) - mt->state.button = BITMASK(MT_BUTTON_RIGHT); + btdata = BITMASK(MT_BUTTON_RIGHT); if (mt->state.nfinger == 3) - mt->state.button = BITMASK(MT_BUTTON_MIDDLE); + btdata = BITMASK(MT_BUTTON_MIDDLE); } - gs->btmask = (mt->state.button ^ mt->prev_state.button) & BITONES(DIM_BUTTON); - gs->btdata = mt->state.button & BITONES(DIM_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->dx || gs->dy) { diff --git a/src/memory.c b/src/memory.c index 6b502d8..b213694 100644 --- a/src/memory.c +++ b/src/memory.c @@ -23,4 +23,5 @@ void init_memory(struct Memory *mem) { + memset(mem, 0, sizeof(struct Memory)); } diff --git a/src/memory.h b/src/memory.h index 46dd312..a6c51ec 100644 --- a/src/memory.h +++ b/src/memory.h @@ -25,6 +25,7 @@ #include "mtstate.h" struct Memory { + unsigned btdata; }; void init_memory(struct Memory *mem); -- cgit v1.2.3