diff options
| -rw-r--r-- | src/grail-api.c | 20 |
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; |
