summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/grail-api.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/grail-api.c b/src/grail-api.c
index b7d1ce0..bf5a7df 100644
--- a/src/grail-api.c
+++ b/src/grail-api.c
@@ -89,18 +89,32 @@ static void handle_abs_events(struct grail *ge, const struct input_event *syn)
89 struct move_model *move = &gru->move; 89 struct move_model *move = &gru->move;
90 struct tapping_model *tap = &gru->tapping; 90 struct tapping_model *tap = &gru->tapping;
91 int used_move = grail_mask_count(gin->types, sizeof(gin->types)); 91 int used_move = grail_mask_count(gin->types, sizeof(gin->types));
92 int used_tap = grail_mask_get(gin->types, GRAIL_TYPE_TAP1);
92 int ismove = move->single && (move->active & fm_mask) && !used_move; 93 int ismove = move->single && (move->active & fm_mask) && !used_move;
93 int ishold = move->single && tap->active && !used_move; 94 int ishold = move->single && tap->active && !used_move;
94 int pointer = ismove || ishold; 95 int istap = gru->tapping.tap == 1 && !used_tap;
96 int pointer = move->single;
95 97
96 if (!impl->pointer_status && pointer) { 98 if (!impl->pointer_status && pointer) {
97 impl->report_x = impl->pointer_x; 99 impl->report_x = impl->pointer_x;
98 impl->report_y = impl->pointer_y; 100 impl->report_y = impl->pointer_y;
99 impl->report_time = syn->time; 101 impl->report_time = syn->time;
100 impl->pointer_status = 1; 102 impl->pointer_status = 1;
101 report_down(impl); 103 if (!used_move)
104 report_down(impl);
105 return;
102 } 106 }
103 if (pointer) { 107
108 if (ishold)
109 return;
110
111 if (istap) {
112 report_down(impl);
113 evput(impl, impl->report_time, EV_KEY, BTN_LEFT, 1);
114 evput(impl, impl->report_time, EV_SYN, SYN_REPORT, 0);
115 evput(impl, syn->time, EV_KEY, BTN_LEFT, 0);
116 } else if (ismove) {
117 report_down(impl);
104 if (impl->report_x != impl->pointer_x) { 118 if (impl->report_x != impl->pointer_x) {
105 evput(impl, syn->time, EV_ABS, ABS_X, impl->pointer_x); 119 evput(impl, syn->time, EV_ABS, ABS_X, impl->pointer_x);
106 impl->report_x = impl->pointer_x; 120 impl->report_x = impl->pointer_x;