diff --git a/doc/user/device-quirks.rst b/doc/user/device-quirks.rst index 2a4494331..6486b1f3e 100644 --- a/doc/user/device-quirks.rst +++ b/doc/user/device-quirks.rst @@ -135,9 +135,6 @@ ModelALPSTouchpad, ModelAppleTouchpad, ModelWacomTouchpad, ModelChromebook ModelTabletNoTilt Indicates that the tablet stylus does not provide tilt axis information, even if the kernel exposes that axis. -ModelTabletNoProximityOut - Indicates that the tablet stylus does not send correct proximity out - events. ModelTouchpadVisibleMarker Indicates the touchpad has a drawn-on visible marker between the software buttons. diff --git a/meson.build b/meson.build index ccdc56134..6a6dad2b2 100644 --- a/meson.build +++ b/meson.build @@ -252,7 +252,6 @@ quirks_data = [ 'quirks/30-vendor-contour.quirks', 'quirks/30-vendor-cyapa.quirks', 'quirks/30-vendor-elantech.quirks', - 'quirks/30-vendor-huion.quirks', 'quirks/30-vendor-ibm.quirks', 'quirks/30-vendor-kensington.quirks', 'quirks/30-vendor-logitech.quirks', diff --git a/quirks/30-vendor-huion.quirks b/quirks/30-vendor-huion.quirks deleted file mode 100644 index 0e46d2084..000000000 --- a/quirks/30-vendor-huion.quirks +++ /dev/null @@ -1,14 +0,0 @@ -# Do not edit this file, it will be overwritten on update - -# HUION PenTablet device. Some of these devices send a BTN_TOOL_PEN event -# with value 1 on the first event received by the device but never send the -# matching BTN_TOOL_PEN value 0 event. The device appears as if it was -# permanently in proximity. -# -# HUION re-uses USB IDs for its devices, not every HUION tablet is -# affected by this bug, libinput will auto-disable this feature -[HUION PenTablet] -MatchUdevType=tablet -MatchBus=usb -MatchVendor=0x256C -ModelTabletNoProximityOut=1 diff --git a/quirks/50-system-hp.quirks b/quirks/50-system-hp.quirks index 4ce73067e..3f38a5e1d 100644 --- a/quirks/50-system-hp.quirks +++ b/quirks/50-system-hp.quirks @@ -41,9 +41,3 @@ MatchDMIModalias=dmi:*svnHP:pnHPSpectrex360Convertible15-bl1XX:* AttrPressureRange=55:40 AttrThumbPressureThreshold=90 AttrPalmPressureThreshold=100 - -[HP Spectre x360 Convertible 13-ap0xxx] -MatchUdevType=tablet -MatchName=ELAN2514:00 04F3:2812 -MatchDMIModalias=dmi:*svnHP:pnHPSpectrex360Convertible13-ap0xxx:* -ModelTabletNoProximityOut=1 diff --git a/src/evdev-tablet.c b/src/evdev-tablet.c index fded69e4b..e5db5c224 100644 --- a/src/evdev-tablet.c +++ b/src/evdev-tablet.c @@ -2157,7 +2157,6 @@ tablet_init(struct tablet_dispatch *tablet, { struct libevdev *evdev = device->evdev; enum libinput_tablet_tool_axis axis; - bool want_proximity_quirk = false; int rc; tablet->base.dispatch_type = DISPATCH_TABLET; @@ -2173,7 +2172,6 @@ tablet_init(struct tablet_dispatch *tablet, if (!libevdev_has_event_code(evdev, EV_KEY, BTN_TOOL_PEN)) { libevdev_enable_event_code(evdev, EV_KEY, BTN_TOOL_PEN, NULL); - want_proximity_quirk = true; tablet->quirks.proximity_out_forced = true; } @@ -2201,12 +2199,9 @@ tablet_init(struct tablet_dispatch *tablet, tablet_set_status(tablet, TABLET_TOOL_OUT_OF_PROXIMITY); - if (evdev_device_has_model_quirk(device, - QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT)) - want_proximity_quirk = true; - - if (want_proximity_quirk) - tablet->quirks.need_to_force_prox_out = true; + /* We always enable the proximity out quirk, but disable it once a + device gives us the right event sequence */ + tablet->quirks.need_to_force_prox_out = true; libinput_timer_init(&tablet->quirks.prox_out_timer, tablet_libinput_context(tablet), diff --git a/src/quirks.c b/src/quirks.c index 8336860b1..85db3b781 100644 --- a/src/quirks.c +++ b/src/quirks.c @@ -250,7 +250,6 @@ quirk_get_name(enum quirk q) case QUIRK_MODEL_SYSTEM76_KUDU: return "ModelSystem76Kudu"; case QUIRK_MODEL_TABLET_MODE_NO_SUSPEND: return "ModelTabletModeNoSuspend"; case QUIRK_MODEL_TABLET_MODE_SWITCH_UNRELIABLE: return "ModelTabletModeSwitchUnreliable"; - case QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT: return "ModelTabletNoProximityOut"; case QUIRK_MODEL_TABLET_NO_TILT: return "ModelTabletNoTilt"; case QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER: return "ModelTouchpadVisibleMarker"; case QUIRK_MODEL_TRACKBALL: return "ModelTrackball"; diff --git a/src/quirks.h b/src/quirks.h index e269e999e..b0e69d215 100644 --- a/src/quirks.h +++ b/src/quirks.h @@ -82,7 +82,6 @@ enum quirk { QUIRK_MODEL_SYSTEM76_KUDU, QUIRK_MODEL_TABLET_MODE_NO_SUSPEND, QUIRK_MODEL_TABLET_MODE_SWITCH_UNRELIABLE, - QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT, QUIRK_MODEL_TABLET_NO_TILT, QUIRK_MODEL_TOUCHPAD_VISIBLE_MARKER, QUIRK_MODEL_TRACKBALL, diff --git a/test/litest-device-huion-pentablet.c b/test/litest-device-huion-pentablet.c index 4236ffd7e..fbf1ae8e0 100644 --- a/test/litest-device-huion-pentablet.c +++ b/test/litest-device-huion-pentablet.c @@ -88,11 +88,6 @@ static int events[] = { -1, -1, }; -static const char quirk_file[] = -"[litest HUION tablet]\n" -"MatchName=litest HUION PenTablet Pen\n" -"ModelTabletNoProximityOut=1\n"; - TEST_DEVICE("huion-tablet", .type = LITEST_HUION_TABLET, .features = LITEST_TABLET | LITEST_HOVER, @@ -102,5 +97,4 @@ TEST_DEVICE("huion-tablet", .id = &input_id, .events = events, .absinfo = absinfo, - .quirk_file = quirk_file, ) diff --git a/test/test-tablet.c b/test/test-tablet.c index 7ed3b00da..97a86e247 100644 --- a/test/test-tablet.c +++ b/test/test-tablet.c @@ -291,18 +291,6 @@ START_TEST(tip_down_prox_in) } END_TEST -static inline bool -tablet_has_proxout_quirk(struct litest_device *dev) -{ - bool is_set = false; - if (!quirks_get_bool(dev->quirks, - QUIRK_MODEL_TABLET_NO_PROXIMITY_OUT, - &is_set)) - return false; - - return is_set; -} - START_TEST(tip_up_prox_out) { struct litest_device *dev = litest_current_device(); @@ -315,9 +303,6 @@ START_TEST(tip_up_prox_out) { -1, -1 } }; - if (tablet_has_proxout_quirk(dev)) - return; - litest_tablet_proximity_in(dev, 10, 10, axes); litest_event(dev, EV_KEY, BTN_TOUCH, 1); litest_event(dev, EV_SYN, SYN_REPORT, 0); @@ -4390,6 +4375,10 @@ START_TEST(touch_arbitration_outside_rect) x = 20; y = 45; + /* disable prox-out timer quirk */ + litest_tablet_proximity_in(dev, x, y - 1, axes); + litest_tablet_proximity_out(dev); + litest_tablet_proximity_in(dev, x, y - 1, axes); litest_drain_events(li); @@ -4400,17 +4389,17 @@ START_TEST(touch_arbitration_outside_rect) litest_drain_events(li); /* left of rect */ - litest_touch_sequence(finger, 0, x - 10, y + 2, x - 10, y + 20, 30); + litest_touch_sequence(finger, 0, x - 10, y + 2, x - 10, y + 20, 3); libinput_dispatch(li); litest_assert_touch_sequence(li); /* above rect */ - litest_touch_sequence(finger, 0, x + 2, y - 35, x + 20, y - 10, 30); + litest_touch_sequence(finger, 0, x + 2, y - 35, x + 20, y - 10, 3); libinput_dispatch(li); litest_assert_touch_sequence(li); /* right of rect */ - litest_touch_sequence(finger, 0, x + 80, y + 2, x + 20, y + 10, 30); + litest_touch_sequence(finger, 0, x + 80, y + 2, x + 20, y + 10, 3); libinput_dispatch(li); litest_assert_touch_sequence(li); @@ -4495,6 +4484,11 @@ START_TEST(touch_arbitration_stop_touch) is_touchpad = !libevdev_has_property(finger->evdev, INPUT_PROP_DIRECT); + /* disable prox-out timer quirk */ + litest_tablet_proximity_in(dev, 30, 30, axes); + litest_tablet_proximity_out(dev); + litest_drain_events(li); + litest_touch_down(finger, 0, 30, 30); litest_touch_move_to(finger, 0, 30, 30, 80, 80, 10); @@ -4504,6 +4498,12 @@ START_TEST(touch_arbitration_stop_touch) litest_drain_events(li); litest_touch_move_to(finger, 0, 80, 80, 30, 30, 10); + litest_assert_empty_queue(li); + + /* tablet event so we don't time out for proximity */ + litest_tablet_motion(dev, 30, 40, axes); + litest_drain_events(li); + /* start another finger to make sure that one doesn't send events either */ litest_touch_down(finger, 1, 30, 30); @@ -4517,6 +4517,9 @@ START_TEST(touch_arbitration_stop_touch) litest_tablet_proximity_out(dev); litest_drain_events(li); + litest_timeout_tablet_proxout(); + litest_drain_events(li); + /* Finger needs to be lifted for events to happen*/ litest_touch_move_to(finger, 0, 30, 30, 80, 80, 10); litest_assert_empty_queue(li); @@ -4528,11 +4531,8 @@ START_TEST(touch_arbitration_stop_touch) litest_touch_up(finger, 1); libinput_dispatch(li); - litest_timeout_touch_arbitration(); - libinput_dispatch(li); - litest_touch_down(finger, 0, 30, 30); - litest_touch_move_to(finger, 0, 30, 30, 80, 80, 10); + litest_touch_move_to(finger, 0, 30, 30, 80, 80, 3); litest_touch_up(finger, 0); libinput_dispatch(li);