diff options
Diffstat (limited to 'src/gestures.c')
-rw-r--r-- | src/gestures.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/gestures.c b/src/gestures.c index a5a17ca..3f59a1e 100644 --- a/src/gestures.c +++ b/src/gestures.c @@ -27,6 +27,7 @@ static const int FINGER_THUMB_MS = 600; static const int BUTTON_HOLD_MS = 200; +#define use_tapping 0 /** * extract_buttons @@ -50,6 +51,12 @@ static void extract_buttons(struct Gestures *gs, struct MTouch* mt) gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); gs->btdata = btdata; mt->mem.btdata = btdata; + } else if (btdata == 0 && mt->mem.ntap) { + if (npoint == 1 && mt->mem.maxtap == 1) + btdata = BITMASK(MT_BUTTON_LEFT); + gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); + gs->btdata = btdata; + mt->mem.btdata = btdata; } if (gs->btmask) { mt_delay_movement(mt, BUTTON_HOLD_MS); @@ -178,6 +185,40 @@ void extract_gestures(struct Gestures *gs, struct MTouch* mt) mt->prev_state = mt->state; } +/** + * extract_delayed_gestures + * + * Extract delayed gestures, such as tapping + * + * Reset memory after use. + * + */ +void extract_delayed_gestures(struct Gestures *gs, struct MTouch* mt) +{ + mt->mem.wait = 0; + + if (!use_tapping && mt->caps.has_left) + return; + + if (mt->mem.tpdown < mt->mem.tpup) { + switch (mt->mem.maxtap) { + case 1: + gs->tapmask = BITMASK(MT_BUTTON_LEFT); + break; + case 2: + gs->tapmask = BITMASK(MT_BUTTON_RIGHT); + break; + case 3: + gs->tapmask = BITMASK(MT_BUTTON_MIDDLE); + break; + } + } + + if (gs->tapmask) + SETBIT(gs->type, GS_TAP); + + gs->ntap = mt->mem.ntap; +} void output_gesture(const struct Gestures *gs) { @@ -199,4 +240,6 @@ void output_gesture(const struct Gestures *gs) xf86Msg(X_INFO, "scale: %d\n", gs->scale); if (GETBIT(gs->type, GS_ROTATE)) xf86Msg(X_INFO, "rotate: %d\n", gs->rot); + foreach_bit(i, gs->tapmask) + xf86Msg(X_INFO, "tap: %d %d\n", i, gs->ntap); } |