forked from pool/libinput
- Add 0001-evdev-add-a-quirk-to-disable-debouncing-on-the-MS-Na.patch
OBS-URL: https://build.opensuse.org/package/show/X11:Wayland/libinput?expand=0&rev=147
This commit is contained in:
parent
3d2a27cb3c
commit
ccf5918e1e
211
0001-evdev-add-a-quirk-to-disable-debouncing-on-the-MS-Na.patch
Normal file
211
0001-evdev-add-a-quirk-to-disable-debouncing-on-the-MS-Na.patch
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
From 3c84788c376a50c0e3453855712d764f02494f17 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Wed, 31 Jan 2018 16:18:15 +1000
|
||||||
|
Subject: [PATCH libinput] evdev: add a quirk to disable debouncing on the MS
|
||||||
|
Nano Transcievers
|
||||||
|
|
||||||
|
A set of wireless devices that can scramble the timestamps, so we get
|
||||||
|
press/release within 8ms even though I doubt the user is capable of doing
|
||||||
|
this. Since they're generally good quality anyway, let's just disable
|
||||||
|
debouncing on those until someone complains and we need something more
|
||||||
|
sophisticated.
|
||||||
|
|
||||||
|
https://bugs.freedesktop.org/show_bug.cgi?id=104415
|
||||||
|
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
---
|
||||||
|
meson.build | 1
|
||||||
|
src/evdev-debounce.c | 38 ++++++++++++++++++++++++++++++++++++-
|
||||||
|
src/evdev-fallback.h | 2 +
|
||||||
|
src/evdev.c | 1
|
||||||
|
src/evdev.h | 1
|
||||||
|
test/litest.h | 3 ++
|
||||||
|
test/test-pointer.c | 14 ++++++-------
|
||||||
|
udev/90-libinput-model-quirks.hwdb | 4 +++
|
||||||
|
8 files changed, 56 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
Index: libinput-1.9.4/meson.build
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/meson.build
|
||||||
|
+++ libinput-1.9.4/meson.build
|
||||||
|
@@ -561,6 +561,7 @@ if get_option('tests')
|
||||||
|
'test/litest-device-mouse-low-dpi.c',
|
||||||
|
'test/litest-device-mouse-wheel-click-angle.c',
|
||||||
|
'test/litest-device-mouse-wheel-click-count.c',
|
||||||
|
+ 'test/litest-device-ms-nano-transceiver-mouse.c',
|
||||||
|
'test/litest-device-ms-surface-cover.c',
|
||||||
|
'test/litest-device-protocol-a-touch-screen.c',
|
||||||
|
'test/litest-device-qemu-usb-tablet.c',
|
||||||
|
Index: libinput-1.9.4/src/evdev-debounce.c
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/src/evdev-debounce.c
|
||||||
|
+++ libinput-1.9.4/src/evdev-debounce.c
|
||||||
|
@@ -83,6 +83,7 @@ debounce_state_to_str(enum debounce_stat
|
||||||
|
CASE_RETURN_STRING(DEBOUNCE_STATE_MAYBE_SPURIOUS);
|
||||||
|
CASE_RETURN_STRING(DEBOUNCE_STATE_RELEASED);
|
||||||
|
CASE_RETURN_STRING(DEBOUNCE_STATE_PRESS_PENDING);
|
||||||
|
+ CASE_RETURN_STRING(DEBOUNCE_STATE_DISABLED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
@@ -395,6 +396,31 @@ debounce_press_pending_event(struct fall
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
+debounce_disabled_event(struct fallback_dispatch *fallback,
|
||||||
|
+ enum debounce_event event,
|
||||||
|
+ uint64_t time)
|
||||||
|
+{
|
||||||
|
+ switch (event) {
|
||||||
|
+ case DEBOUNCE_EVENT_PRESS:
|
||||||
|
+ fallback->debounce.button_time = time;
|
||||||
|
+ debounce_notify_button(fallback,
|
||||||
|
+ LIBINPUT_BUTTON_STATE_PRESSED);
|
||||||
|
+ break;
|
||||||
|
+ case DEBOUNCE_EVENT_RELEASE:
|
||||||
|
+ fallback->debounce.button_time = time;
|
||||||
|
+ debounce_notify_button(fallback,
|
||||||
|
+ LIBINPUT_BUTTON_STATE_RELEASED);
|
||||||
|
+ break;
|
||||||
|
+ case DEBOUNCE_EVENT_TIMEOUT_SHORT:
|
||||||
|
+ case DEBOUNCE_EVENT_TIMEOUT:
|
||||||
|
+ log_debounce_bug(fallback, event);
|
||||||
|
+ break;
|
||||||
|
+ case DEBOUNCE_EVENT_OTHERBUTTON:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
debounce_handle_event(struct fallback_dispatch *fallback,
|
||||||
|
enum debounce_event event,
|
||||||
|
uint64_t time)
|
||||||
|
@@ -434,6 +460,9 @@ debounce_handle_event(struct fallback_di
|
||||||
|
case DEBOUNCE_STATE_PRESS_PENDING:
|
||||||
|
debounce_press_pending_event(fallback, event, time);
|
||||||
|
break;
|
||||||
|
+ case DEBOUNCE_STATE_DISABLED:
|
||||||
|
+ debounce_disabled_event(fallback, event, time);
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
|
||||||
|
evdev_log_debug(fallback->device,
|
||||||
|
@@ -484,7 +513,8 @@ fallback_debounce_handle_state(struct fa
|
||||||
|
for (size_t i = 0; i < nchanged; i++) {
|
||||||
|
bool is_down = hw_is_key_down(dispatch, changed[i]);
|
||||||
|
|
||||||
|
- if (flushed) {
|
||||||
|
+ if (flushed &&
|
||||||
|
+ dispatch->debounce.state != DEBOUNCE_STATE_DISABLED) {
|
||||||
|
debounce_set_state(dispatch,
|
||||||
|
!is_down ?
|
||||||
|
DEBOUNCE_STATE_IS_DOWN :
|
||||||
|
@@ -538,6 +568,12 @@ fallback_init_debounce(struct fallback_d
|
||||||
|
struct evdev_device *device = dispatch->device;
|
||||||
|
char timer_name[64];
|
||||||
|
|
||||||
|
+ if (device->model_flags & EVDEV_MODEL_MS_NANO_TRANSCEIVER) {
|
||||||
|
+ dispatch->debounce.state = DEBOUNCE_STATE_DISABLED;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+
|
||||||
|
dispatch->debounce.state = DEBOUNCE_STATE_IS_UP;
|
||||||
|
|
||||||
|
snprintf(timer_name,
|
||||||
|
Index: libinput-1.9.4/src/evdev-fallback.h
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/src/evdev-fallback.h
|
||||||
|
+++ libinput-1.9.4/src/evdev-fallback.h
|
||||||
|
@@ -41,6 +41,8 @@ enum debounce_state {
|
||||||
|
DEBOUNCE_STATE_MAYBE_SPURIOUS,
|
||||||
|
DEBOUNCE_STATE_RELEASED,
|
||||||
|
DEBOUNCE_STATE_PRESS_PENDING,
|
||||||
|
+
|
||||||
|
+ DEBOUNCE_STATE_DISABLED = 999,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct fallback_dispatch {
|
||||||
|
Index: libinput-1.9.4/src/evdev.c
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/src/evdev.c
|
||||||
|
+++ libinput-1.9.4/src/evdev.c
|
||||||
|
@@ -1237,6 +1237,7 @@ evdev_read_model_flags(struct evdev_devi
|
||||||
|
MODEL(APPLE_TOUCHPAD_ONEBUTTON),
|
||||||
|
MODEL(LOGITECH_MARBLE_MOUSE),
|
||||||
|
MODEL(TABLET_NO_PROXIMITY_OUT),
|
||||||
|
+ MODEL(MS_NANO_TRANSCEIVER),
|
||||||
|
#undef MODEL
|
||||||
|
{ "ID_INPUT_TRACKBALL", EVDEV_MODEL_TRACKBALL },
|
||||||
|
{ NULL, EVDEV_MODEL_DEFAULT },
|
||||||
|
Index: libinput-1.9.4/src/evdev.h
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/src/evdev.h
|
||||||
|
+++ libinput-1.9.4/src/evdev.h
|
||||||
|
@@ -123,6 +123,7 @@ enum evdev_device_model {
|
||||||
|
EVDEV_MODEL_APPLE_TOUCHPAD_ONEBUTTON = (1 << 25),
|
||||||
|
EVDEV_MODEL_LOGITECH_MARBLE_MOUSE = (1 << 26),
|
||||||
|
EVDEV_MODEL_TABLET_NO_PROXIMITY_OUT = (1 << 27),
|
||||||
|
+ EVDEV_MODEL_MS_NANO_TRANSCEIVER = (1 << 28),
|
||||||
|
};
|
||||||
|
|
||||||
|
enum evdev_button_scroll_state {
|
||||||
|
Index: libinput-1.9.4/test/litest.h
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/test/litest.h
|
||||||
|
+++ libinput-1.9.4/test/litest.h
|
||||||
|
@@ -268,6 +268,8 @@ enum litest_device_type {
|
||||||
|
LITEST_WACOM_BAMBOO_2FG_PAD,
|
||||||
|
LITEST_WACOM_BAMBOO_2FG_PEN,
|
||||||
|
LITEST_WACOM_BAMBOO_2FG_FINGER,
|
||||||
|
+ LITEST_HP_WMI_HOTKEYS,
|
||||||
|
+ LITEST_MS_NANO_TRANSCEIVER_MOUSE,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum litest_device_feature {
|
||||||
|
@@ -301,6 +303,7 @@ enum litest_device_feature {
|
||||||
|
LITEST_LEDS = 1 << 25,
|
||||||
|
LITEST_SWITCH = 1 << 26,
|
||||||
|
LITEST_IGNORED = 1 << 27,
|
||||||
|
+ LITEST_NO_DEBOUNCE = 1 << 28,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* this is a semi-mt device, so we keep track of the touches that the tests
|
||||||
|
Index: libinput-1.9.4/test/test-pointer.c
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/test/test-pointer.c
|
||||||
|
+++ libinput-1.9.4/test/test-pointer.c
|
||||||
|
@@ -2602,11 +2602,11 @@ litest_setup_tests_pointer(void)
|
||||||
|
|
||||||
|
litest_add("pointer:time", pointer_time_usec, LITEST_RELATIVE, LITEST_ANY);
|
||||||
|
|
||||||
|
- litest_add_ranged("pointer:debounce", debounce_bounce, LITEST_BUTTON, LITEST_TOUCHPAD, &buttons);
|
||||||
|
- litest_add("pointer:debounce", debounce_bounce_check_immediate, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||||
|
- litest_add_ranged("pointer:debounce", debounce_spurious, LITEST_BUTTON, LITEST_TOUCHPAD, &buttons);
|
||||||
|
- litest_add("pointer:debounce", debounce_spurious_multibounce, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||||
|
- litest_add("pointer:debounce_otherbutton", debounce_spurious_dont_enable_on_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||||
|
- litest_add("pointer:debounce_otherbutton", debounce_spurious_cancel_debounce_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||||
|
- litest_add("pointer:debounce_otherbutton", debounce_spurious_switch_to_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||||
|
+ litest_add_ranged("pointer:debounce", debounce_bounce, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE, &buttons);
|
||||||
|
+ litest_add("pointer:debounce", debounce_bounce_check_immediate, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||||
|
+ litest_add_ranged("pointer:debounce", debounce_spurious, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE, &buttons);
|
||||||
|
+ litest_add("pointer:debounce", debounce_spurious_multibounce, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||||
|
+ litest_add("pointer:debounce_otherbutton", debounce_spurious_dont_enable_on_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||||
|
+ litest_add("pointer:debounce_otherbutton", debounce_spurious_cancel_debounce_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||||
|
+ litest_add("pointer:debounce_otherbutton", debounce_spurious_switch_to_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||||
|
}
|
||||||
|
Index: libinput-1.9.4/udev/90-libinput-model-quirks.hwdb
|
||||||
|
===================================================================
|
||||||
|
--- libinput-1.9.4.orig/udev/90-libinput-model-quirks.hwdb
|
||||||
|
+++ libinput-1.9.4/udev/90-libinput-model-quirks.hwdb
|
||||||
|
@@ -225,6 +225,10 @@ libinput:name:*Lid Switch*:dmi:*svnMicro
|
||||||
|
libinput:name:*Microsoft Surface Type Cover Keyboard*:dmi:*svnMicrosoftCorporation:pnSurface3:*
|
||||||
|
LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
|
||||||
|
|
||||||
|
+# Microsoft Microsoft® Nano Transceiver v2.0"
|
||||||
|
+libinput:mouse:input:b0003v045Ep0800*
|
||||||
|
+ LIBINPUT_MODEL_MS_NANO_TRANSCEIVER=1
|
||||||
|
+
|
||||||
|
##########################################
|
||||||
|
# Razer
|
||||||
|
##########################################
|
@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Feb 8 00:02:32 UTC 2018 - jengelh@inai.de
|
||||||
|
|
||||||
|
- Add 0001-evdev-add-a-quirk-to-disable-debouncing-on-the-MS-Na.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Thu Dec 14 08:33:23 UTC 2017 - jengelh@inai.de
|
Thu Dec 14 08:33:23 UTC 2017 - jengelh@inai.de
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package libinput
|
# spec file for package libinput
|
||||||
#
|
#
|
||||||
# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
|
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
# remain the property of their copyright owners, unless otherwise agreed
|
||||||
@ -34,6 +34,7 @@ Source3: baselibs.conf
|
|||||||
Source4: %name.keyring
|
Source4: %name.keyring
|
||||||
Source5: libinput-rpmlintrc
|
Source5: libinput-rpmlintrc
|
||||||
Patch1: kill-env.diff
|
Patch1: kill-env.diff
|
||||||
|
Patch2: 0001-evdev-add-a-quirk-to-disable-debouncing-on-the-MS-Na.patch
|
||||||
BuildRequires: doxygen
|
BuildRequires: doxygen
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: gcc-c++
|
BuildRequires: gcc-c++
|
||||||
|
Loading…
Reference in New Issue
Block a user