From 1e07054fbeab6e90f104c279d3246097dd838a17 Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Sun, 2 Jan 2011 12:38:26 +0100 Subject: Prepare for queued event handling The current grail operates via callbacks. In order to make grail work as a pipe, where input and output can be controlled externally, add the missing event queue for gestures, and align the code to simplify a switch. Signed-off-by: Henrik Rydberg --- src/grail-api.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'src/grail-api.c') diff --git a/src/grail-api.c b/src/grail-api.c index f013aa3..f38ca18 100644 --- a/src/grail-api.c +++ b/src/grail-api.c @@ -184,28 +184,31 @@ static void handle_abs_events(struct grail *ge, const struct input_event *syn) static void tp_sync(struct touch_dev *dev, const struct input_event *syn) { - struct input_event ev; struct grail *ge = dev->priv; struct grail_impl *impl = ge->impl; + int head = impl->evbuf.head; + struct input_event iev; + struct grail_event gev; struct touch_frame *frame = &dev->frame; - int nevent = 0; gin_frame_begin(ge, frame); gru_recognize(ge, frame); gin_frame_end(ge, frame); - if (!ge->event) { - evbuf_clear(&impl->evbuf); - return; - } if (!impl->filter_abs) handle_abs_events(ge, syn); + if (impl->evbuf.head != head) + evbuf_put(&impl->evbuf, syn); + + while (!grailbuf_empty(&impl->gbuf)) { + grailbuf_get(&impl->gbuf, &gev); + if (ge->gesture) + ge->gesture(ge, &gev); + } while (!evbuf_empty(&impl->evbuf)) { - evbuf_get(&impl->evbuf, &ev); - ge->event(ge, &ev); - nevent++; + evbuf_get(&impl->evbuf, &iev); + if (ge->event) + ge->event(ge, &iev); } - if (nevent) - ge->event(ge, syn); } void grail_filter_abs_events(struct grail *ge, int usage) -- cgit v1.2.3