tablet: increase touch arbitration rectangle height
authorJosé Expósito <jose.exposito89@gmail.com>
Wed, 23 Nov 2022 07:48:55 +0000 (08:48 +0100)
committerPeter Hutterer <peter.hutterer@who-t.net>
Wed, 23 Nov 2022 22:39:02 +0000 (22:39 +0000)
A user was experiencing issues with their hand being recognized as
touch input above the stylus tip.

Since touch above the stylus should be rare, increase the touch
arbitration rectangle height by 50mm.

Fix: https://gitlab.freedesktop.org/libinput/libinput/-/issues/809
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
src/evdev-tablet.c
test/test-tablet.c

index 01a8c1cffa42fc8ab819f06bcad99fa9699b227d..6ce21d0787d353592c74a71e497df395959bf10c 100644 (file)
@@ -1501,8 +1501,8 @@ tablet_calculate_arbitration_rect(struct tablet_dispatch *tablet)
 
        mm = evdev_device_units_to_mm(device, &tablet->axes.point);
 
-       /* The rect we disable is 20mm left of the tip, 50mm north of the
-        * tip, and 200x200mm large.
+       /* The rect we disable is 20mm left of the tip, 100mm north of the
+        * tip, and 200x250mm large.
         * If the stylus is tilted left (tip further right than the eraser
         * end) assume left-handed mode.
         *
@@ -1523,8 +1523,8 @@ tablet_calculate_arbitration_rect(struct tablet_dispatch *tablet)
                r.x = 0;
        }
 
-       r.y = mm.y - 50;
-       r.h = 200;
+       r.y = mm.y - 100;
+       r.h = 250;
        if (r.y < 0) {
                r.h -= r.y;
                r.y = 0;
index 098c9e56c1eea469ff0957bbb213be4c8da96748..2a6e07319541f45d405dd7957c43d08c97f8c70b 100644 (file)
@@ -4891,7 +4891,7 @@ START_TEST(touch_arbitration_outside_rect)
                return;
 
        x = 20;
-       y = 45;
+       y = 70;
 
        /* disable prox-out timer quirk */
        litest_tablet_proximity_in(dev, x, y - 1, axes);
@@ -4912,7 +4912,7 @@ START_TEST(touch_arbitration_outside_rect)
        litest_assert_touch_sequence(li);
 
        /* above rect */
-       litest_touch_sequence(finger, 0, x + 2, y - 35, x + 20, y - 10, 3);
+       litest_touch_sequence(finger, 0, x + 2, y - 65, x + 20, y - 40, 3);
        libinput_dispatch(li);
        litest_assert_touch_sequence(li);