aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2010-04-10 23:18:02 +0200
committerHenrik Rydberg <rydberg@euromail.se>2010-04-15 06:10:07 +0200
commit030f4fdbe44d1af41c55cdda5baf71ba3225829f (patch)
tree8e5c28b70fbdd3fe0ce5a3e55a0b4b39ef65de83
parent32d5f821c5bbefc6eae2319209288ec74079529a (diff)
downloadxorg-input-kobomultitouch-030f4fdbe44d1af41c55cdda5baf71ba3225829f.tar.gz
xorg-input-kobomultitouch-030f4fdbe44d1af41c55cdda5baf71ba3225829f.tar.bz2
xorg-input-kobomultitouch-030f4fdbe44d1af41c55cdda5baf71ba3225829f.zip
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 <rydberg@euromail.se>
-rw-r--r--src/gestures.c12
-rw-r--r--src/memory.c1
-rw-r--r--src/memory.h1
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);