diff options
author | Peter Hutterer <peter.hutterer@who-t.net> | 2019-06-17 11:18:57 +1000 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2019-06-17 14:39:58 +1000 |
commit | ffd8c71e4ed348eea8abb5bf93212ad074dc9506 (patch) | |
tree | d1e35c94da1a72fe8166d4873f8404a78292b963 /test | |
parent | ea5b764eb48f770c67b9e1a8eaa7113e3ac28915 (diff) | |
download | libinput-ffd8c71e4ed348eea8abb5bf93212ad074dc9506.tar.gz |
tablet: fix double proximity out on slow proximity out pens
Where the proximity out event is delayed by the kernel, libinput would cause
an extra proxmity in-out after the forced proximity out event.
Event sequence is basically (k: kernel, l: libinput)
k: tablet axis events
l: tablet axis events
k: nothing for $proximity timer milliseconds
l: tablet proximity out
k: proximity out event
l: proximity in event
l: proximity out event
Fixes #306
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Diffstat (limited to 'test')
-rw-r--r-- | test/test-tablet.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/test-tablet.c b/test/test-tablet.c index 6f333c8a..12beba9f 100644 --- a/test/test-tablet.c +++ b/test/test-tablet.c @@ -1506,6 +1506,32 @@ START_TEST(proximity_range_button_release) } END_TEST +START_TEST(proximity_out_slow_event) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + struct axis_replacement axes[] = { + { ABS_DISTANCE, 90 }, + { -1, -1 } + }; + + litest_tablet_proximity_in(dev, 10, 10, axes); + litest_tablet_motion(dev, 12, 12, axes); + litest_drain_events(li); + + litest_timeout_tablet_proxout(); + libinput_dispatch(li); + + /* The forced prox out */ + litest_assert_tablet_proximity_event(li, + LIBINPUT_TABLET_TOOL_PROXIMITY_STATE_OUT); + litest_assert_empty_queue(li); + + litest_tablet_proximity_out(dev); + litest_assert_empty_queue(li); +} +END_TEST + START_TEST(proximity_out_on_delete) { struct libinput *li = litest_create_context(); @@ -5651,6 +5677,8 @@ TEST_COLLECTION(tablet) litest_add("tablet:proximity", proximity_range_button_click, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); litest_add("tablet:proximity", proximity_range_button_press, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); litest_add("tablet:proximity", proximity_range_button_release, LITEST_TABLET | LITEST_DISTANCE | LITEST_TOOL_MOUSE, LITEST_ANY); + litest_add("tablet:proximity", proximity_out_slow_event, LITEST_TABLET | LITEST_DISTANCE, LITEST_ANY); + litest_add_no_device("tablet:proximity", proximity_out_on_delete); litest_add("tablet:button", button_down_up, LITEST_TABLET, LITEST_ANY); litest_add("tablet:button", button_seat_count, LITEST_TABLET, LITEST_ANY); |