summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/grail-api.c9
-rw-r--r--src/grail-inserter.c14
-rw-r--r--src/grail-inserter.h4
3 files changed, 10 insertions, 17 deletions
diff --git a/src/grail-api.c b/src/grail-api.c
index d0712b3..0673120 100644
--- a/src/grail-api.c
+++ b/src/grail-api.c
@@ -106,13 +106,14 @@ static void tp_sync(struct touch_dev *dev,
106 struct input_event ev; 106 struct input_event ev;
107 struct grail *ge = dev->priv; 107 struct grail *ge = dev->priv;
108 struct grail_impl *impl = ge->impl; 108 struct grail_impl *impl = ge->impl;
109 struct gesture_inserter *gin = ge->gin;
109 struct touch_frame *frame = &dev->frame; 110 struct touch_frame *frame = &dev->frame;
110 grail_mask_t filtered[DIM_EV_TYPE_BYTES]; 111 int pointer, used_move, nevent = 0;
111 int pointer, nevent = 0;
112 gin_frame_begin(ge, frame); 112 gin_frame_begin(ge, frame);
113 gru_recognize(ge, frame); 113 gru_recognize(ge, frame);
114 gin_frame_end(ge, filtered, sizeof(filtered), frame); 114 gin_frame_end(ge, frame);
115 pointer = pointer_active(ge) && !grail_mask_get(filtered, EV_ABS); 115 used_move = grail_mask_count(gin->types, sizeof(gin->types));
116 pointer = pointer_active(ge) && !used_move;
116 117
117 if (!ge->event) { 118 if (!ge->event) {
118 evbuf_clear(&impl->evbuf); 119 evbuf_clear(&impl->evbuf);
diff --git a/src/grail-inserter.c b/src/grail-inserter.c
index a54b73a..847995a 100644
--- a/src/grail-inserter.c
+++ b/src/grail-inserter.c
@@ -103,20 +103,15 @@ void gin_destroy(struct grail *ge)
103void gin_frame_begin(struct grail *ge, const struct touch_frame *frame) 103void gin_frame_begin(struct grail *ge, const struct touch_frame *frame)
104{ 104{
105 struct gesture_inserter *gin = ge->gin; 105 struct gesture_inserter *gin = ge->gin;
106 memset(gin->types, 0, sizeof(gin->types));
106 gin->time = frame->time; 107 gin->time = frame->time;
107} 108}
108 109
109void gin_frame_end(struct grail *ge, 110void gin_frame_end(struct grail *ge, const struct touch_frame *frame)
110 grail_mask_t *filtered, int max_filtered,
111 const struct touch_frame *frame)
112{ 111{
113 struct gesture_inserter *gin = ge->gin; 112 struct gesture_inserter *gin = ge->gin;
114 grail_mask_t span[DIM_INSTANCE_BYTES];
115 int i, hold = 0, discard = 0; 113 int i, hold = 0, discard = 0;
116 114
117 memset(filtered, 0, max_filtered);
118 memset(span, 0, sizeof(span));
119
120 setup_new_gestures(ge, frame); 115 setup_new_gestures(ge, frame);
121 116
122 grail_mask_foreach(i, gin->used, sizeof(gin->used)) { 117 grail_mask_foreach(i, gin->used, sizeof(gin->used)) {
@@ -140,7 +135,7 @@ void gin_frame_end(struct grail *ge,
140 grail_mask_foreach(i, gin->used, sizeof(gin->used)) { 135 grail_mask_foreach(i, gin->used, sizeof(gin->used)) {
141 struct slot_state *s = &gin->state[i]; 136 struct slot_state *s = &gin->state[i];
142 struct gesture_event ev; 137 struct gesture_event ev;
143 grail_mask_set_mask(span, s->span, sizeof(span)); 138 grail_mask_set(gin->types, s->type);
144 if (s->priority < hold) 139 if (s->priority < hold)
145 continue; 140 continue;
146 while (!gebuf_empty(&s->buf)) { 141 while (!gebuf_empty(&s->buf)) {
@@ -154,9 +149,6 @@ void gin_frame_end(struct grail *ge,
154 if (s->status == GRAIL_STATUS_END) 149 if (s->status == GRAIL_STATUS_END)
155 gin_gid_discard(ge, s->id); 150 gin_gid_discard(ge, s->id);
156 } 151 }
157
158 if (grail_mask_count(span, sizeof(span)))
159 grail_mask_set(filtered, EV_ABS);
160} 152}
161 153
162int gin_gid_begin_select(struct grail *ge, int type, int priority, 154int gin_gid_begin_select(struct grail *ge, int type, int priority,
diff --git a/src/grail-inserter.h b/src/grail-inserter.h
index c5a865a..9baecb7 100644
--- a/src/grail-inserter.h
+++ b/src/grail-inserter.h
@@ -48,6 +48,7 @@ struct slot_state {
48 48
49struct gesture_inserter { 49struct gesture_inserter {
50 struct slot_state state[DIM_INSTANCE]; 50 struct slot_state state[DIM_INSTANCE];
51 grail_mask_t types[DIM_GRAIL_TYPE_BYTES];
51 grail_mask_t unused[DIM_INSTANCE_BYTES]; 52 grail_mask_t unused[DIM_INSTANCE_BYTES];
52 grail_mask_t fresh[DIM_INSTANCE_BYTES]; 53 grail_mask_t fresh[DIM_INSTANCE_BYTES];
53 grail_mask_t used[DIM_INSTANCE_BYTES]; 54 grail_mask_t used[DIM_INSTANCE_BYTES];
@@ -83,8 +84,7 @@ int gin_init(struct grail *ge);
83void gin_destroy(struct grail *ge); 84void gin_destroy(struct grail *ge);
84 85
85void gin_frame_begin(struct grail *ge, const struct touch_frame *frame); 86void gin_frame_begin(struct grail *ge, const struct touch_frame *frame);
86void gin_frame_end(struct grail *ge, grail_mask_t *filtered, int max_filtered, 87void gin_frame_end(struct grail *ge, const struct touch_frame *frame);
87 const struct touch_frame *frame);
88 88
89int gin_gid_begin_select(struct grail *ge, int type, int priority, 89int gin_gid_begin_select(struct grail *ge, int type, int priority,
90 const grail_mask_t *span, int nspan); 90 const grail_mask_t *span, int nspan);