summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Rydberg <rydberg@euromail.se>2011-03-28 19:17:55 +0200
committerHenrik Rydberg <rydberg@euromail.se>2011-03-28 22:02:11 +0200
commit601ded516fbd45ebf12429f4cde67bf7629f6f91 (patch)
tree067bd67fa184232a27be22c5dd61427831169f45
parent2260b92141802e004cd12346f1b0aabfe159b466 (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>
-rw-r--r--src/grail-inserter.c4
-rw-r--r--src/grail-inserter.h1
2 files changed, 4 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;
diff --git a/src/grail-inserter.h b/src/grail-inserter.h
index d1faa0a..55e94a3 100644
--- a/src/grail-inserter.h
+++ b/src/grail-inserter.h
@@ -39,6 +39,7 @@ struct slot_state {
39 int priority; 39 int priority;
40 int slice; 40 int slice;
41 int timeout; 41 int timeout;
42 int sent;
42 int id; 43 int id;
43 int status; 44 int status;
44 int nclient; 45 int nclient;