summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2019-06-17 11:18:57 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2019-06-17 14:39:58 +1000
commitffd8c71e4ed348eea8abb5bf93212ad074dc9506 (patch)
treed1e35c94da1a72fe8166d4873f8404a78292b963 /test
parentea5b764eb48f770c67b9e1a8eaa7113e3ac28915 (diff)
downloadlibinput-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.c28
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);