diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2010-04-18 16:25:54 +0200 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2010-04-18 16:27:52 +0200 |
| commit | d556fa17321040e2813582a0231c1c8328f964eb (patch) | |
| tree | a324efa957e8e6af1d75b11b1a049cdaba62b706 /src | |
| parent | ffe299eaea8a7295228701205c9286cc66e9ab0f (diff) | |
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 <rydberg@euromail.se>
Diffstat (limited to 'src')
| -rw-r--r-- | src/gestures.c | 10 |
1 files 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) | |||
| 159 | if (mt->mem.npoint == 3) | 159 | if (mt->mem.npoint == 3) |
| 160 | btdata = BITMASK(MT_BUTTON_MIDDLE); | 160 | btdata = BITMASK(MT_BUTTON_MIDDLE); |
| 161 | } | 161 | } |
| 162 | gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); | 162 | if (mt->state.button != mt->prev_state.button) { |
| 163 | gs->btdata = btdata; | 163 | gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); |
| 164 | mt->mem.btdata = btdata; | 164 | gs->btdata = btdata; |
| 165 | mt->mem.btdata = btdata; | ||
| 166 | } | ||
| 165 | } | 167 | } |
| 166 | 168 | ||
| 167 | /******************************************************/ | 169 | /******************************************************/ |
| 168 | 170 | ||
| 169 | static void extract_type(struct Gestures *gs, struct MTouch* mt) | 171 | static void extract_type(struct Gestures *gs, struct MTouch* mt) |
| 170 | { | 172 | { |
| 173 | if (gs->btmask) | ||
| 174 | SETBIT(gs->type, GS_BUTTON); | ||
| 171 | if (gs->dx || gs->dy) { | 175 | if (gs->dx || gs->dy) { |
| 172 | if (mt->mem.npoint == 1) | 176 | if (mt->mem.npoint == 1) |
| 173 | SETBIT(gs->type, GS_MOVE); | 177 | SETBIT(gs->type, GS_MOVE); |
