From 1e8aa1edc281132efa485f41741193af8ee13c8e Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Tue, 10 Aug 2010 13:09:08 +0100 Subject: always send pointer movement gestures Always send drag events for one-finger touches, but only filter the ABS_X/Y events if grail_filter_abs_events() is set to true. Signed-off-by: Henrik Rydberg --- src/gestures-drag.c | 2 +- src/grail-api.c | 14 ++++++++++++-- src/grail-recognizer.c | 5 ----- src/grail-recognizer.h | 1 - 4 files changed, 13 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/gestures-drag.c b/src/gestures-drag.c index a02943e..b894bda 100644 --- a/src/gestures-drag.c +++ b/src/gestures-drag.c @@ -58,7 +58,7 @@ int gru_drag(struct grail *ge, struct combo_model *state = &gru->drag; struct move_model *move = &gru->move; int mask = state->active ? (move->active & fm_mask) : fm_mask; - if (!move->multi && (!gru->pointer_gesture || !move->single)) { + if (!move->multi && !move->single) { if (state->active) { gru_end(ge, state->gid, move, state->prop, state->nprop); diff --git a/src/grail-api.c b/src/grail-api.c index f7b664e..fbd0e83 100644 --- a/src/grail-api.c +++ b/src/grail-api.c @@ -35,6 +35,7 @@ struct grail_impl { struct touch_dev dev; struct touch_engine engine; struct evbuf evbuf; + int filter_abs; }; static void tp_event(struct touch_engine *engine, @@ -51,19 +52,22 @@ static void tp_sync(struct touch_engine *engine, struct input_event ev; struct grail *ge = engine->priv; struct grail_impl *x = ge->impl; + struct gesture_recognizer *gru = ge->gru; struct touch_frame *frame = &engine->frame; grail_mask_t filtered[DIM_EV_TYPE_BYTES]; - int nevent = 0; + int dofilt, nevent = 0; gin_frame_begin(ge, frame); gru_recognize(ge, frame); gin_frame_end(ge, filtered, sizeof(filtered), frame); + dofilt = gru->move.multi || gru->move.single && x->filter_abs; + if (!ge->event) { evbuf_clear(&x->evbuf); return; } while (!evbuf_empty(&x->evbuf)) { evbuf_get(&x->evbuf, &ev); - if (grail_mask_get(filtered, ev.type)) + if (dofilt && grail_mask_get(filtered, ev.type)) continue; ge->event(ge, &ev); nevent++; @@ -72,6 +76,12 @@ static void tp_sync(struct touch_engine *engine, ge->event(ge, syn); } +void grail_filter_abs_events(struct grail *ge, int usage) +{ + struct grail_impl *x = ge->impl; + x->filter_abs = usage; +} + int grail_open(struct grail *ge, int fd) { struct grail_impl *x; diff --git a/src/grail-recognizer.c b/src/grail-recognizer.c index 5f4bee0..fffbf6e 100644 --- a/src/grail-recognizer.c +++ b/src/grail-recognizer.c @@ -53,8 +53,3 @@ void gru_recognize(struct grail *ge, const struct touch_frame *frame) gru_tapping(ge, frame); ge->gru->frame = *frame; } - -int gru_use_pointer_gesture(struct grail *ge, int usage) -{ - ge->gru->pointer_gesture = usage; -} diff --git a/src/grail-recognizer.h b/src/grail-recognizer.h index 1c36819..b39eac3 100644 --- a/src/grail-recognizer.h +++ b/src/grail-recognizer.h @@ -32,7 +32,6 @@ struct gesture_recognizer { struct combo_model pinch; struct combo_model rotate; struct tapping_model tapping; - int pointer_gesture; }; int gru_init(struct grail *ge); -- cgit v1.2.3