From a0a4c6c30704a792193ff49d7fcaab63dac8a07a Mon Sep 17 00:00:00 2001 From: Henrik Rydberg Date: Mon, 28 Mar 2011 20:55:29 +0200 Subject: Introduce touch gesture events Touch gesture events follow the same logic as drags, except they cannot be held back but are emitted immediately. Signed-off-by: Henrik Rydberg --- src/grail-inserter.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/grail-inserter.c') diff --git a/src/grail-inserter.c b/src/grail-inserter.c index ff4f0b6..1ee8e5a 100644 --- a/src/grail-inserter.c +++ b/src/grail-inserter.c @@ -119,7 +119,7 @@ void gin_frame_begin(struct grail *ge, const struct utouch_frame *frame) void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) { struct gesture_inserter *gin = ge->gin; - int i, hold = 0, discard = 0; + int i, hold[2] = { 0, 0 }, discard[2] = { 0, 0 }; setup_new_gestures(ge, frame); @@ -127,17 +127,17 @@ void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) struct slot_state *s = &gin->state[i]; if (!s->nclient) continue; - if (s->priority > hold) - hold = s->priority; + if (s->priority > hold[s->slice]) + hold[s->slice] = s->priority; if (s->status != GRAIL_STATUS_UPDATE) continue; - if (s->priority > discard) - discard = s->priority; + if (s->priority > discard[s->slice]) + discard[s->slice] = s->priority; } grail_mask_foreach(i, gin->used, sizeof(gin->used)) { struct slot_state *s = &gin->state[i]; - if (!s->nclient || s->priority < discard) + if (!s->nclient || s->priority < discard[s->slice]) gin_gid_discard(ge, s->id); } @@ -145,7 +145,7 @@ void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) struct slot_state *s = &gin->state[i]; struct gesture_event ev; grail_mask_set(gin->types, s->type); - if (s->priority < hold) + if (s->priority < hold[s->slice]) continue; while (!gebuf_empty(&s->buf)) { gebuf_get(&s->buf, &ev); @@ -171,7 +171,13 @@ int gin_gid_begin(struct grail *ge, int type, int priority, return -1; s = &gin->state[i]; s->type = type; - s->priority = priority; + if (priority < 0) { + s->priority = -priority; + s->slice = 1; + } else { + s->priority = priority; + s->slice = 0; + } s->id = gin->gestureid++ & MAX_GESTURE_ID; s->status = GRAIL_STATUS_BEGIN; s->nclient = 0; -- cgit v1.2.3