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/grail-api.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/grail-api.c') 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; -- cgit v1.2.3