summaryrefslogtreecommitdiff
path: root/src/gestures.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gestures.c')
-rw-r--r--src/gestures.c43
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 @@
27 27
28static const int FINGER_THUMB_MS = 600; 28static const int FINGER_THUMB_MS = 600;
29static const int BUTTON_HOLD_MS = 200; 29static const int BUTTON_HOLD_MS = 200;
30#define use_tapping 0
30 31
31/** 32/**
32 * extract_buttons 33 * extract_buttons
@@ -50,6 +51,12 @@ static void extract_buttons(struct Gestures *gs, struct MTouch* mt)
50 gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON); 51 gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON);
51 gs->btdata = btdata; 52 gs->btdata = btdata;
52 mt->mem.btdata = btdata; 53 mt->mem.btdata = btdata;
54 } else if (btdata == 0 && mt->mem.ntap) {
55 if (npoint == 1 && mt->mem.maxtap == 1)
56 btdata = BITMASK(MT_BUTTON_LEFT);
57 gs->btmask = (btdata ^ mt->mem.btdata) & BITONES(DIM_BUTTON);
58 gs->btdata = btdata;
59 mt->mem.btdata = btdata;
53 } 60 }
54 if (gs->btmask) { 61 if (gs->btmask) {
55 mt_delay_movement(mt, BUTTON_HOLD_MS); 62 mt_delay_movement(mt, BUTTON_HOLD_MS);
@@ -178,6 +185,40 @@ void extract_gestures(struct Gestures *gs, struct MTouch* mt)
178 mt->prev_state = mt->state; 185 mt->prev_state = mt->state;
179} 186}
180 187
188/**
189 * extract_delayed_gestures
190 *
191 * Extract delayed gestures, such as tapping
192 *
193 * Reset memory after use.
194 *
195 */
196void extract_delayed_gestures(struct Gestures *gs, struct MTouch* mt)
197{
198 mt->mem.wait = 0;
199
200 if (!use_tapping && mt->caps.has_left)
201 return;
202
203 if (mt->mem.tpdown < mt->mem.tpup) {
204 switch (mt->mem.maxtap) {
205 case 1:
206 gs->tapmask = BITMASK(MT_BUTTON_LEFT);
207 break;
208 case 2:
209 gs->tapmask = BITMASK(MT_BUTTON_RIGHT);
210 break;
211 case 3:
212 gs->tapmask = BITMASK(MT_BUTTON_MIDDLE);
213 break;
214 }
215 }
216
217 if (gs->tapmask)
218 SETBIT(gs->type, GS_TAP);
219
220 gs->ntap = mt->mem.ntap;
221}
181 222
182void output_gesture(const struct Gestures *gs) 223void output_gesture(const struct Gestures *gs)
183{ 224{
@@ -199,4 +240,6 @@ void output_gesture(const struct Gestures *gs)
199 xf86Msg(X_INFO, "scale: %d\n", gs->scale); 240 xf86Msg(X_INFO, "scale: %d\n", gs->scale);
200 if (GETBIT(gs->type, GS_ROTATE)) 241 if (GETBIT(gs->type, GS_ROTATE))
201 xf86Msg(X_INFO, "rotate: %d\n", gs->rot); 242 xf86Msg(X_INFO, "rotate: %d\n", gs->rot);
243 foreach_bit(i, gs->tapmask)
244 xf86Msg(X_INFO, "tap: %d %d\n", i, gs->ntap);
202} 245}