Lines Matching refs:tp
112 log_tap_bug(struct tp_dispatch *tp, struct tp_touch *t, enum tap_event event)
114 evdev_log_bug_libinput(tp->device,
118 tap_state_to_str(tp->tap.state));
123 tp_tap_notify(struct tp_dispatch *tp,
134 assert(tp->tap.map < ARRAY_LENGTH(button_map));
139 button = button_map[tp->tap.map][nfingers - 1];
142 tp->tap.buttons_pressed |= bit(nfingers);
144 tp->tap.buttons_pressed &= ~bit(nfingers);
146 evdev_pointer_notify_button(tp->device,
153 tp_tap_set_timer(struct tp_dispatch *tp, uint64_t time)
155 libinput_timer_set(&tp->tap.timer, time + DEFAULT_TAP_TIMEOUT_PERIOD);
159 tp_tap_set_drag_timer(struct tp_dispatch *tp, uint64_t time,
162 libinput_timer_set(&tp->tap.timer,
169 tp_tap_set_draglock_timer(struct tp_dispatch *tp, uint64_t time)
171 libinput_timer_set(&tp->tap.timer,
176 tp_tap_clear_timer(struct tp_dispatch *tp)
178 libinput_timer_cancel(&tp->tap.timer);
182 tp_tap_move_to_dead(struct tp_dispatch *tp, struct tp_touch *t)
184 tp->tap.state = TAP_STATE_DEAD;
186 tp_tap_clear_timer(tp);
190 tp_tap_idle_handle_event(struct tp_dispatch *tp,
196 tp->tap.state = TAP_STATE_TOUCH;
197 tp->tap.saved_press_time = time;
198 tp_tap_set_timer(tp, time);
203 log_tap_bug(tp, t, event);
208 tp->tap.state = TAP_STATE_DEAD;
211 log_tap_bug(tp, t, event);
214 tp->tap.state = TAP_STATE_IDLE;
222 tp_tap_touch_handle_event(struct tp_dispatch *tp,
229 tp->tap.state = TAP_STATE_TOUCH_2;
230 tp->tap.saved_press_time = time;
231 tp_tap_set_timer(tp, time);
234 tp_tap_notify(tp,
235 tp->tap.saved_press_time,
238 if (tp->tap.drag_enabled) {
239 tp->tap.state = TAP_STATE_1FGTAP_TAPPED;
240 tp->tap.saved_release_time = time;
241 tp_tap_set_drag_timer(tp, time, 1);
243 tp_tap_notify(tp,
247 tp->tap.state = TAP_STATE_IDLE;
251 tp_tap_move_to_dead(tp, t);
254 tp->tap.state = TAP_STATE_HOLD;
255 tp_tap_clear_timer(tp);
256 tp_gesture_tap_timeout(tp, time);
259 tp->tap.state = TAP_STATE_DEAD;
262 tp->tap.state = TAP_STATE_IDLE;
264 tp->tap.nfingers_down--;
266 tp_tap_clear_timer(tp);
269 tp->tap.state = TAP_STATE_IDLE;
270 tp_tap_clear_timer(tp);
278 tp_tap_hold_handle_event(struct tp_dispatch *tp,
285 tp->tap.state = TAP_STATE_TOUCH_2;
286 tp->tap.saved_press_time = time;
287 tp_tap_set_timer(tp, time);
290 tp->tap.state = TAP_STATE_IDLE;
293 tp_tap_move_to_dead(tp, t);
298 tp->tap.state = TAP_STATE_DEAD;
301 tp->tap.state = TAP_STATE_IDLE;
303 tp->tap.nfingers_down--;
307 tp->tap.state = TAP_STATE_IDLE;
315 tp_tap_tapped_handle_event(struct tp_dispatch *tp,
323 log_tap_bug(tp, t, event);
332 tp->tap.state = dest[nfingers_tapped - 1];
333 tp->tap.saved_press_time = time;
334 tp_tap_set_timer(tp, time);
338 tp->tap.state = TAP_STATE_IDLE;
339 tp_tap_notify(tp,
340 tp->tap.saved_release_time,
345 tp->tap.state = TAP_STATE_DEAD;
346 tp_tap_notify(tp,
347 tp->tap.saved_release_time,
352 log_tap_bug(tp, t, event);
355 log_tap_bug(tp, t, event);
363 tp_tap_touch2_handle_event(struct tp_dispatch *tp,
370 tp->tap.state = TAP_STATE_TOUCH_3;
371 tp->tap.saved_press_time = time;
372 tp_tap_set_timer(tp, time);
375 tp->tap.state = TAP_STATE_TOUCH_2_RELEASE;
376 tp->tap.saved_release_time = time;
377 tp_tap_set_timer(tp, time);
380 tp_tap_move_to_dead(tp, t);
383 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
384 tp_gesture_tap_timeout(tp, time);
387 tp->tap.state = TAP_STATE_DEAD;
392 tp->tap.state = TAP_STATE_TOUCH;
400 tp_tap_touch2_hold_handle_event(struct tp_dispatch *tp,
407 tp->tap.state = TAP_STATE_TOUCH_3;
408 tp->tap.saved_press_time = time;
409 tp_tap_set_timer(tp, time);
412 tp->tap.state = TAP_STATE_HOLD;
415 tp_tap_move_to_dead(tp, t);
418 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
421 tp->tap.state = TAP_STATE_DEAD;
426 tp->tap.state = TAP_STATE_HOLD;
434 tp_tap_touch2_release_handle_event(struct tp_dispatch *tp,
441 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
443 tp_tap_clear_timer(tp);
446 tp_tap_notify(tp,
447 tp->tap.saved_press_time,
450 if (tp->tap.drag_enabled) {
451 tp->tap.state = TAP_STATE_2FGTAP_TAPPED;
452 tp_tap_set_drag_timer(tp, time, 2);
454 tp_tap_notify(tp,
455 tp->tap.saved_release_time,
458 tp->tap.state = TAP_STATE_IDLE;
462 tp_tap_move_to_dead(tp, t);
465 tp->tap.state = TAP_STATE_HOLD;
468 tp->tap.state = TAP_STATE_DEAD;
479 tp_tap_notify(tp,
480 tp->tap.saved_press_time,
483 if (tp->tap.drag_enabled) {
487 tp->tap.state = TAP_STATE_1FGTAP_TAPPED;
489 tp_tap_notify(tp,
490 tp->tap.saved_release_time,
493 tp->tap.state = TAP_STATE_IDLE;
502 tp_tap_touch3_handle_event(struct tp_dispatch *tp,
509 tp->tap.state = TAP_STATE_DEAD;
510 tp_tap_clear_timer(tp);
513 tp_tap_move_to_dead(tp, t);
516 tp->tap.state = TAP_STATE_TOUCH_3_HOLD;
517 tp_tap_clear_timer(tp);
518 tp_gesture_tap_timeout(tp, time);
521 tp->tap.state = TAP_STATE_TOUCH_3_RELEASE;
522 tp->tap.saved_release_time = time;
523 tp_tap_set_timer(tp, time);
526 tp->tap.state = TAP_STATE_DEAD;
531 tp->tap.state = TAP_STATE_TOUCH_2;
539 tp_tap_touch3_hold_handle_event(struct tp_dispatch *tp,
546 tp->tap.state = TAP_STATE_DEAD;
547 tp_tap_set_timer(tp, time);
550 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
553 tp_tap_move_to_dead(tp, t);
558 tp->tap.state = TAP_STATE_DEAD;
563 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
571 tp_tap_touch3_release_handle_event(struct tp_dispatch *tp,
578 tp_tap_notify(tp,
579 tp->tap.saved_press_time,
582 tp_tap_notify(tp,
583 tp->tap.saved_release_time,
586 tp->tap.state = TAP_STATE_TOUCH_3;
587 tp->tap.saved_press_time = time;
588 tp_tap_set_timer(tp, time);
591 tp->tap.state = TAP_STATE_TOUCH_3_RELEASE_2;
592 tp_tap_set_timer(tp, time);
595 tp_tap_notify(tp,
596 tp->tap.saved_press_time,
599 tp_tap_notify(tp,
600 tp->tap.saved_release_time,
603 tp_tap_move_to_dead(tp, t);
606 tp_tap_notify(tp,
607 tp->tap.saved_press_time,
610 tp_tap_notify(tp,
611 tp->tap.saved_release_time,
614 tp->tap.state = TAP_STATE_TOUCH_2_HOLD;
617 tp_tap_notify(tp,
618 tp->tap.saved_press_time,
621 tp_tap_notify(tp,
622 tp->tap.saved_release_time,
625 tp->tap.state = TAP_STATE_DEAD;
630 tp->tap.state = TAP_STATE_TOUCH_2_RELEASE;
638 tp_tap_touch3_release2_handle_event(struct tp_dispatch *tp,
645 tp_tap_notify(tp,
646 tp->tap.saved_press_time,
649 tp_tap_notify(tp,
650 tp->tap.saved_release_time,
653 tp->tap.state = TAP_STATE_TOUCH_2;
654 tp->tap.saved_press_time = time;
655 tp_tap_set_timer(tp, time);
658 tp_tap_notify(tp,
659 tp->tap.saved_press_time,
662 if (tp->tap.drag_enabled) {
663 tp->tap.state = TAP_STATE_3FGTAP_TAPPED;
664 tp_tap_set_drag_timer(tp, time, 3);
666 tp_tap_notify(tp,
667 tp->tap.saved_release_time,
670 tp->tap.state = TAP_STATE_IDLE;
674 tp_tap_notify(tp,
675 tp->tap.saved_press_time,
678 tp_tap_notify(tp,
679 tp->tap.saved_release_time,
682 tp_tap_move_to_dead(tp, t);
685 tp_tap_notify(tp,
686 tp->tap.saved_press_time,
689 tp_tap_notify(tp,
690 tp->tap.saved_release_time,
693 tp->tap.state = TAP_STATE_HOLD;
696 tp_tap_notify(tp,
697 tp->tap.saved_press_time,
700 tp_tap_notify(tp,
701 tp->tap.saved_release_time,
704 tp->tap.state = TAP_STATE_DEAD;
709 tp_tap_notify(tp,
710 tp->tap.saved_press_time,
713 if (tp->tap.drag_enabled) {
720 tp->tap.state = TAP_STATE_2FGTAP_TAPPED;
722 tp_tap_notify(tp,
723 tp->tap.saved_release_time,
726 tp->tap.state = TAP_STATE_IDLE;
735 tp_tap_dragging_or_doubletap_handle_event(struct tp_dispatch *tp,
742 tp_tap_notify(tp,
743 tp->tap.saved_release_time,
746 tp->tap.state = TAP_STATE_TOUCH_2;
747 tp->tap.saved_press_time = time;
748 tp_tap_set_timer(tp, time);
752 tp->tap.state = TAP_STATE_1FGTAP_TAPPED;
753 tp_tap_notify(tp,
754 tp->tap.saved_release_time,
757 tp_tap_notify(tp,
758 tp->tap.saved_press_time,
761 tp->tap.saved_release_time = time;
762 tp_tap_set_timer(tp, time);
772 tp->tap.state = dest[nfingers_tapped - 1];
776 tp->tap.state = TAP_STATE_DEAD;
777 tp_tap_notify(tp,
778 tp->tap.saved_release_time,
791 tp->tap.state = dest[nfingers_tapped - 1];
800 tp_tap_dragging_handle_event(struct tp_dispatch *tp,
814 tp->tap.state = dest[nfingers_tapped - 1];
818 if (tp->tap.drag_lock_enabled) {
825 tp->tap.state = dest[nfingers_tapped - 1];
826 tp_tap_set_draglock_timer(tp, time);
828 tp_tap_notify(tp,
832 tp->tap.state = TAP_STATE_IDLE;
840 tp->tap.state = TAP_STATE_DEAD;
841 tp_tap_notify(tp,
849 tp_tap_notify(tp,
850 tp->tap.saved_release_time,
853 tp->tap.state = TAP_STATE_IDLE;
861 tp_tap_dragging_wait_handle_event(struct tp_dispatch *tp,
875 tp->tap.state = dest[nfingers_tapped - 1];
876 tp_tap_set_timer(tp, time);
881 log_tap_bug(tp, t, event);
884 tp->tap.state = TAP_STATE_IDLE;
885 tp_tap_notify(tp,
891 tp->tap.state = TAP_STATE_DEAD;
892 tp_tap_notify(tp,
899 log_tap_bug(tp, t, event);
907 tp_tap_dragging_tap_handle_event(struct tp_dispatch *tp,
915 tp_tap_notify(tp,
919 tp_tap_clear_timer(tp);
920 tp_tap_move_to_dead(tp, t);
924 tp->tap.state = TAP_STATE_IDLE;
925 tp_tap_notify(tp,
938 tp->tap.state = dest[nfingers_tapped - 1];
942 tp->tap.state = TAP_STATE_DEAD;
943 tp_tap_notify(tp,
957 tp->tap.state = dest[nfingers_tapped - 1];
966 tp_tap_dragging2_handle_event(struct tp_dispatch *tp,
980 tp->tap.state = dest[nfingers_tapped - 1];
984 tp->tap.state = TAP_STATE_DEAD;
985 tp_tap_notify(tp,
995 tp->tap.state = TAP_STATE_DEAD;
996 tp_tap_notify(tp,
1010 tp->tap.state = dest[nfingers_tapped - 1];
1019 tp_tap_dead_handle_event(struct tp_dispatch *tp,
1027 if (tp->tap.nfingers_down == 0)
1028 tp->tap.state = TAP_STATE_IDLE;
1039 if (tp->tap.nfingers_down == 0)
1040 tp->tap.state = TAP_STATE_IDLE;
1046 tp_tap_handle_event(struct tp_dispatch *tp,
1053 current = tp->tap.state;
1055 switch(tp->tap.state) {
1057 tp_tap_idle_handle_event(tp, t, event, time);
1060 tp_tap_touch_handle_event(tp, t, event, time);
1063 tp_tap_hold_handle_event(tp, t, event, time);
1066 tp_tap_tapped_handle_event(tp, t, event, time, 1);
1069 tp_tap_tapped_handle_event(tp, t, event, time, 2);
1072 tp_tap_tapped_handle_event(tp, t, event, time, 3);
1075 tp_tap_touch2_handle_event(tp, t, event, time);
1078 tp_tap_touch2_hold_handle_event(tp, t, event, time);
1081 tp_tap_touch2_release_handle_event(tp, t, event, time);
1084 tp_tap_touch3_handle_event(tp, t, event, time);
1087 tp_tap_touch3_hold_handle_event(tp, t, event, time);
1090 tp_tap_touch3_release_handle_event(tp, t, event, time);
1093 tp_tap_touch3_release2_handle_event(tp, t, event, time);
1096 tp_tap_dragging_or_doubletap_handle_event(tp, t, event, time,
1100 tp_tap_dragging_or_doubletap_handle_event(tp, t, event, time,
1104 tp_tap_dragging_or_doubletap_handle_event(tp, t, event, time,
1108 tp_tap_dragging_handle_event(tp, t, event, time, 1);
1111 tp_tap_dragging_handle_event(tp, t, event, time, 2);
1114 tp_tap_dragging_handle_event(tp, t, event, time, 3);
1117 tp_tap_dragging_wait_handle_event(tp, t, event, time, 1);
1120 tp_tap_dragging_wait_handle_event(tp, t, event, time, 2);
1123 tp_tap_dragging_wait_handle_event(tp, t, event, time, 3);
1126 tp_tap_dragging_tap_handle_event(tp, t, event, time, 1);
1129 tp_tap_dragging_tap_handle_event(tp, t, event, time, 2);
1132 tp_tap_dragging_tap_handle_event(tp, t, event, time, 3);
1135 tp_tap_dragging2_handle_event(tp, t, event, time, 1);
1138 tp_tap_dragging2_handle_event(tp, t, event, time, 2);
1141 tp_tap_dragging2_handle_event(tp, t, event, time, 3);
1144 tp_tap_dead_handle_event(tp, t, event, time);
1148 if (tp->tap.state == TAP_STATE_IDLE || tp->tap.state == TAP_STATE_DEAD)
1149 tp_tap_clear_timer(tp);
1151 if (current != tp->tap.state)
1152 evdev_log_debug(tp->device,
1158 tap_state_to_str(tp->tap.state));
1162 tp_tap_exceeds_motion_threshold(struct tp_dispatch *tp,
1166 tp_phys_delta(tp, device_delta(t->point, t->tap.initial));
1175 if (tp->device->model_flags & EVDEV_MODEL_SYNAPTICS_SERIAL_TOUCHPAD &&
1176 (tp->nfingers_down > 2 || tp->old_nfingers_down > 2) &&
1177 (tp->nfingers_down > tp->num_slots ||
1178 tp->old_nfingers_down > tp->num_slots)) {
1186 if (tp->semi_mt && tp->nfingers_down != tp->old_nfingers_down)
1193 tp_tap_enabled(struct tp_dispatch *tp)
1195 return tp->tap.enabled && !tp->tap.suspended;
1199 tp_tap_handle_state(struct tp_dispatch *tp, uint64_t time)
1204 if (!tp_tap_enabled(tp))
1210 if (tp->buttons.is_clickpad && tp->queued & TOUCHPAD_EVENT_BUTTON_PRESS)
1211 tp_tap_handle_event(tp, NULL, TAP_EVENT_BUTTON, time);
1213 tp_for_each_touch(tp, t) {
1217 if (tp->buttons.is_clickpad &&
1218 tp->queued & TOUCHPAD_EVENT_BUTTON_PRESS)
1232 tp_tap_handle_event(tp,
1247 tp_tap_handle_event(tp, t, TAP_EVENT_PALM, time);
1248 assert(tp->tap.nfingers_down > 0);
1249 tp->tap.nfingers_down--;
1255 if (tp_thumb_ignored_for_tap(tp, t)) {
1262 tp->tap.nfingers_down++;
1263 tp_tap_handle_event(tp, t, TAP_EVENT_TOUCH, time);
1266 assert(tp->tap.nfingers_down >= 1);
1267 tp->tap.nfingers_down--;
1268 tp_tap_handle_event(tp, t, TAP_EVENT_RELEASE, time);
1271 } else if (tp->tap.state != TAP_STATE_IDLE &&
1272 tp_thumb_ignored(tp, t)) {
1273 tp_tap_handle_event(tp, t, TAP_EVENT_THUMB, time);
1274 } else if (tp->tap.state != TAP_STATE_IDLE &&
1275 tp_tap_exceeds_motion_threshold(tp, t)) {
1280 tp_for_each_touch(tp, tmp) {
1285 tp_tap_handle_event(tp, t, TAP_EVENT_MOTION, time);
1295 switch (tp->tap.state) {
1316 assert(tp->tap.nfingers_down <= tp->nfingers_down);
1317 if (tp->nfingers_down == 0)
1318 assert(tp->tap.nfingers_down == 0);
1324 tp_tap_update_map(struct tp_dispatch *tp)
1326 if (tp->tap.state != TAP_STATE_IDLE)
1329 if (tp->tap.map != tp->tap.want_map)
1330 tp->tap.map = tp->tap.want_map;
1334 tp_tap_post_process_state(struct tp_dispatch *tp)
1336 tp_tap_update_map(tp);
1342 struct tp_dispatch *tp = data;
1345 tp_tap_handle_event(tp, NULL, TAP_EVENT_TIMEOUT, time);
1347 tp_for_each_touch(tp, t) {
1357 tp_tap_enabled_update(struct tp_dispatch *tp, bool suspended, bool enabled, uint64_t time)
1359 bool was_enabled = tp_tap_enabled(tp);
1361 tp->tap.suspended = suspended;
1362 tp->tap.enabled = enabled;
1364 if (tp_tap_enabled(tp) == was_enabled)
1367 if (tp_tap_enabled(tp)) {
1371 tp_for_each_touch(tp, t) {
1379 tp->tap.state = TAP_STATE_IDLE;
1380 tp->tap.nfingers_down = 0;
1382 tp_release_all_taps(tp, time);
1390 struct tp_dispatch *tp = tp_dispatch(dispatch);
1392 return min(tp->ntouches, 3U); /* we only do up to 3 finger tap */
1400 struct tp_dispatch *tp = tp_dispatch(dispatch);
1402 tp_tap_enabled_update(tp, tp->tap.suspended,
1413 struct tp_dispatch *tp = tp_dispatch(dispatch);
1415 return tp->tap.enabled ? LIBINPUT_CONFIG_TAP_ENABLED :
1454 struct tp_dispatch *tp = tp_dispatch(dispatch);
1456 tp->tap.want_map = map;
1458 tp_tap_update_map(tp);
1467 struct tp_dispatch *tp = tp_dispatch(dispatch);
1469 return tp->tap.want_map;
1483 struct tp_dispatch *tp = tp_dispatch(dispatch);
1485 tp->tap.drag_enabled = enabled;
1494 struct tp_dispatch *tp = tp_dispatch(dispatch);
1496 return tp->tap.drag_enabled;
1518 struct tp_dispatch *tp = tp_dispatch(dispatch);
1520 tp->tap.drag_lock_enabled = enabled;
1529 struct tp_dispatch *tp = tp_dispatch(dispatch);
1531 return tp->tap.drag_lock_enabled;
1549 tp_init_tap(struct tp_dispatch *tp)
1553 tp->tap.config.count = tp_tap_config_count;
1554 tp->tap.config.set_enabled = tp_tap_config_set_enabled;
1555 tp->tap.config.get_enabled = tp_tap_config_is_enabled;
1556 tp->tap.config.get_default = tp_tap_config_get_default;
1557 tp->tap.config.set_map = tp_tap_config_set_map;
1558 tp->tap.config.get_map = tp_tap_config_get_map;
1559 tp->tap.config.get_default_map = tp_tap_config_get_default_map;
1560 tp->tap.config.set_drag_enabled = tp_tap_config_set_drag_enabled;
1561 tp->tap.config.get_drag_enabled = tp_tap_config_get_drag_enabled;
1562 tp->tap.config.get_default_drag_enabled = tp_tap_config_get_default_drag_enabled;
1563 tp->tap.config.set_draglock_enabled = tp_tap_config_set_draglock_enabled;
1564 tp->tap.config.get_draglock_enabled = tp_tap_config_get_draglock_enabled;
1565 tp->tap.config.get_default_draglock_enabled = tp_tap_config_get_default_draglock_enabled;
1566 tp->device->base.config.tap = &tp->tap.config;
1568 tp->tap.state = TAP_STATE_IDLE;
1569 tp->tap.enabled = tp_tap_default(tp->device);
1570 tp->tap.map = LIBINPUT_CONFIG_TAP_MAP_LRM;
1571 tp->tap.want_map = tp->tap.map;
1572 tp->tap.drag_enabled = tp_drag_default(tp->device);
1573 tp->tap.drag_lock_enabled = tp_drag_lock_default(tp->device);
1578 evdev_device_get_sysname(tp->device));
1579 libinput_timer_init(&tp->tap.timer,
1580 tp_libinput_context(tp),
1582 tp_tap_handle_timeout, tp);
1586 tp_remove_tap(struct tp_dispatch *tp)
1588 libinput_timer_cancel(&tp->tap.timer);
1592 tp_release_all_taps(struct tp_dispatch *tp, uint64_t now)
1598 if (tp->tap.buttons_pressed & bit(i))
1599 tp_tap_notify(tp, now, i, LIBINPUT_BUTTON_STATE_RELEASED);
1603 tp_for_each_touch(tp, t) {
1614 tp->tap.state = TAP_STATE_IDLE;
1615 tp->tap.nfingers_down = 0;
1619 tp_tap_suspend(struct tp_dispatch *tp, uint64_t time)
1621 tp_tap_enabled_update(tp, true, tp->tap.enabled, time);
1625 tp_tap_resume(struct tp_dispatch *tp, uint64_t time)
1627 tp_tap_enabled_update(tp, false, tp->tap.enabled, time);
1631 tp_tap_dragging(const struct tp_dispatch *tp)
1633 switch (tp->tap.state) {
1653 tp_tap_dragging_or_double_tapping(const struct tp_dispatch *tp)
1655 switch (tp->tap.state) {