diff options
| author | Henrik Rydberg <rydberg@euromail.se> | 2011-03-28 19:17:55 +0200 |
|---|---|---|
| committer | Henrik Rydberg <rydberg@euromail.se> | 2011-03-28 22:02:11 +0200 |
| commit | 601ded516fbd45ebf12429f4cde67bf7629f6f91 (patch) | |
| tree | 067bd67fa184232a27be22c5dd61427831169f45 /src/grail-inserter.c | |
| parent | 2260b92141802e004cd12346f1b0aabfe159b466 (diff) | |
Do not hold back active gestures
Gestures that has once been sent should never be held back. The
current code would under some circumstance hold the gesture end
event and later discard it. This oneliner solves the problem, which
has been around since 241c5ec, Aug 2010. LP: #744391.
Signed-off-by: Henrik Rydberg <rydberg@euromail.se>
Diffstat (limited to 'src/grail-inserter.c')
| -rw-r--r-- | src/grail-inserter.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/grail-inserter.c b/src/grail-inserter.c index fc9076a..651d08d 100644 --- a/src/grail-inserter.c +++ b/src/grail-inserter.c | |||
| @@ -174,12 +174,13 @@ void gin_frame_end(struct grail *ge, const struct utouch_frame *frame) | |||
| 174 | struct slot_state *s = &gin->state[i]; | 174 | struct slot_state *s = &gin->state[i]; |
| 175 | struct gesture_event ev; | 175 | struct gesture_event ev; |
| 176 | grail_mask_set(gin->types, s->type); | 176 | grail_mask_set(gin->types, s->type); |
| 177 | if (s->priority < hold[s->slice]) | 177 | if (s->priority < hold[s->slice] && !s->sent) |
| 178 | continue; | 178 | continue; |
| 179 | while (!gebuf_empty(&s->buf)) { | 179 | while (!gebuf_empty(&s->buf)) { |
| 180 | gebuf_get(&s->buf, &ev); | 180 | gebuf_get(&s->buf, &ev); |
| 181 | gin_send_event(ge, s, &ev, frame); | 181 | gin_send_event(ge, s, &ev, frame); |
| 182 | } | 182 | } |
| 183 | s->sent = 1; | ||
| 183 | } | 184 | } |
| 184 | 185 | ||
| 185 | grail_mask_foreach(i, gin->used, sizeof(gin->used)) { | 186 | grail_mask_foreach(i, gin->used, sizeof(gin->used)) { |
| @@ -208,6 +209,7 @@ int gin_gid_begin(struct grail *ge, int type, int priority, | |||
| 208 | s->slice = 0; | 209 | s->slice = 0; |
| 209 | } | 210 | } |
| 210 | s->timeout = 0; | 211 | s->timeout = 0; |
| 212 | s->sent = 0; | ||
| 211 | s->id = gin->gestureid++ & MAX_GESTURE_ID; | 213 | s->id = gin->gestureid++ & MAX_GESTURE_ID; |
| 212 | s->status = GRAIL_STATUS_BEGIN; | 214 | s->status = GRAIL_STATUS_BEGIN; |
| 213 | s->nclient = 0; | 215 | s->nclient = 0; |
