From 5d7ec311cdef842e60756d9189d09e3814e4ad1d Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Fri, 25 Mar 2011 19:10:19 +0100 Subject: Decouple timeout from discard Move the actual gesture discard from the recognition phase to the instantiation phase. Signed-off-by: Henrik Rydberg --- src/grail-inserter.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/grail-inserter.c') diff --git a/src/grail-inserter.c b/src/grail-inserter.c index 1ee8e5a..5225cb8 100644 --- a/src/grail-inserter.c +++ b/src/grail-inserter.c @@ -141,6 +141,13 @@ void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) gin_gid_discard(ge, s->id); } + grail_mask_foreach(i, gin->used, sizeof(gin->used)) { + struct slot_state *s = &gin->state[i]; + if (!s->timeout) + continue; + gin_gid_discard(ge, s->id); + } + grail_mask_foreach(i, gin->used, sizeof(gin->used)) { struct slot_state *s = &gin->state[i]; struct gesture_event ev; @@ -178,6 +185,7 @@ int gin_gid_begin(struct grail *ge, int type, int priority, s->priority = priority; s->slice = 0; } + s->timeout = 0; s->id = gin->gestureid++ & MAX_GESTURE_ID; s->status = GRAIL_STATUS_BEGIN; s->nclient = 0; @@ -204,6 +212,13 @@ void gin_gid_discard(struct grail *ge, int gid) grail_mask_set(gin->unused, i); } +void gin_gid_timeout(struct grail *ge, int gid) +{ + int i = find_gslot(ge->gin, gid); + if (i >= 0) + ge->gin->state[i].timeout = 1; +} + void gin_gid_event(struct grail *ge, int gid, float x, float y, int ntouch, const grail_prop_t *prop, int nprop, -- cgit v1.2.3