diff --git a/test/litest.c b/test/litest.c index 78ff71c7..d60fb413 100644 --- a/test/litest.c +++ b/test/litest.c @@ -2909,6 +2909,12 @@ litest_timeout_gesture(void) msleep(120); } +void +litest_timeout_trackpoint(void) +{ + msleep(320); +} + void litest_push_event_frame(struct litest_device *dev) { diff --git a/test/litest.h b/test/litest.h index 8011a412..f8e740f2 100644 --- a/test/litest.h +++ b/test/litest.h @@ -648,6 +648,9 @@ litest_timeout_dwt_long(void); void litest_timeout_gesture(void); +void +litest_timeout_trackpoint(void); + void litest_push_event_frame(struct litest_device *dev); diff --git a/test/trackpoint.c b/test/trackpoint.c index a9d01c41..b92b994d 100644 --- a/test/trackpoint.c +++ b/test/trackpoint.c @@ -280,6 +280,75 @@ START_TEST(trackpoint_topsoftbuttons_left_handed_both) } END_TEST +START_TEST(trackpoint_palmdetect) +{ + struct litest_device *trackpoint = litest_current_device(); + struct litest_device *touchpad; + struct libinput *li = trackpoint->libinput; + int i; + + touchpad = litest_add_device(li, LITEST_SYNAPTICS_I2C); + litest_drain_events(li); + + for (i = 0; i < 10; i++) { + litest_event(trackpoint, EV_REL, REL_X, 1); + litest_event(trackpoint, EV_REL, REL_Y, 1); + litest_event(trackpoint, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + } + litest_drain_events(li); + + litest_touch_down(touchpad, 0, 30, 30); + litest_touch_move_to(touchpad, 0, 30, 30, 80, 80, 10, 1); + litest_touch_up(touchpad, 0); + litest_assert_empty_queue(li); + + litest_timeout_trackpoint(); + libinput_dispatch(li); + + litest_touch_down(touchpad, 0, 30, 30); + litest_touch_move_to(touchpad, 0, 30, 30, 80, 80, 10, 1); + litest_touch_up(touchpad, 0); + litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); + + litest_delete_device(touchpad); +} +END_TEST + +START_TEST(trackpoint_palmdetect_resume_touch) +{ + struct litest_device *trackpoint = litest_current_device(); + struct litest_device *touchpad; + struct libinput *li = trackpoint->libinput; + int i; + + touchpad = litest_add_device(li, LITEST_SYNAPTICS_I2C); + litest_drain_events(li); + + for (i = 0; i < 10; i++) { + litest_event(trackpoint, EV_REL, REL_X, 1); + litest_event(trackpoint, EV_REL, REL_Y, 1); + litest_event(trackpoint, EV_SYN, SYN_REPORT, 0); + libinput_dispatch(li); + } + litest_drain_events(li); + + litest_touch_down(touchpad, 0, 30, 30); + litest_touch_move_to(touchpad, 0, 30, 30, 80, 80, 10, 1); + litest_assert_empty_queue(li); + + litest_timeout_trackpoint(); + libinput_dispatch(li); + + /* touch started after last tp event, expect resume */ + litest_touch_move_to(touchpad, 0, 80, 80, 30, 30, 10, 1); + litest_touch_up(touchpad, 0); + litest_assert_only_typed_events(li, LIBINPUT_EVENT_POINTER_MOTION); + + litest_delete_device(touchpad); +} +END_TEST + void litest_setup_tests_trackpoint(void) { @@ -290,4 +359,7 @@ litest_setup_tests_trackpoint(void) litest_add("trackpoint:left-handed", trackpoint_topsoftbuttons_left_handed_trackpoint, LITEST_TOPBUTTONPAD, LITEST_ANY); litest_add("trackpoint:left-handed", trackpoint_topsoftbuttons_left_handed_touchpad, LITEST_TOPBUTTONPAD, LITEST_ANY); litest_add("trackpoint:left-handed", trackpoint_topsoftbuttons_left_handed_both, LITEST_TOPBUTTONPAD, LITEST_ANY); + + litest_add("trackpoint:palmdetect", trackpoint_palmdetect, LITEST_POINTINGSTICK, LITEST_ANY); + litest_add("trackpoint:palmdetect", trackpoint_palmdetect_resume_touch, LITEST_POINTINGSTICK, LITEST_ANY); }