Timo Aaltonen pushed to branch upstream-unstable at X Strike Force / lib / libinput
Commits:
-
011c7d71
by Peter Hutterer at 2021-08-02T16:44:32+10:00
-
da1bbce7
by Thomas Stenhouse-Pyne at 2021-08-02T16:44:40+10:00
-
cb0b88b6
by Mohamed Elsharnouby at 2021-08-02T16:44:42+10:00
-
ecc8cec3
by The_Observer at 2021-08-02T16:44:43+10:00
-
ae2ba96d
by Peter Hutterer at 2021-08-02T16:44:45+10:00
-
d1571400
by Kevin Anderson at 2021-08-02T16:45:14+10:00
-
62b10a79
by Sanjiv at 2021-08-02T16:45:15+10:00
-
108f580d
by Quytelda Kahja at 2021-08-02T16:45:22+10:00
-
d1704a1f
by Quytelda Kahja at 2021-08-02T16:45:24+10:00
-
3a90c008
by satrmb at 2021-08-02T16:45:40+10:00
-
7f8113bb
by Peter Hutterer at 2021-08-03T08:56:46+10:00
12 changed files:
- doc/user/device-quirks.rst
- meson.build
- + quirks/50-framework.quirks
- + quirks/50-system-chuwi.quirks
- quirks/50-system-dell.quirks
- + quirks/50-system-huawei.quirks
- quirks/50-system-lenovo.quirks
- + quirks/50-system-purism.quirks
- src/evdev-tablet.c
- src/quirks.c
- src/quirks.h
- tools/shared.c
Changes:
| ... | ... | @@ -190,3 +190,6 @@ AttrInputPropEnable=INPUT_PROP_BUTTONPAD;INPUT_PROP_POINTER; |
| 190 | 190 |
AttrPointingStickIntegration=internal|external
|
| 191 | 191 |
Indicates the integration of the pointing stick. This is a string enum.
|
| 192 | 192 |
Only needed for external pointing sticks. These are rare.
|
| 193 |
+AttrTabletSmoothing=1|0
|
|
| 194 |
+ Enables (1) or disables (0) input smoothing for tablet devices. Smoothing is enabled
|
|
| 195 |
+ by default, except on AES devices.
|
| 1 | 1 |
project('libinput', 'c',
|
| 2 |
- version : '1.18.0',
|
|
| 2 |
+ version : '1.18.1',
|
|
| 3 | 3 |
license : 'MIT/Expat',
|
| 4 | 4 |
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
|
| 5 | 5 |
meson_version : '>= 0.47.0')
|
| 1 |
+[Framework Laptop Touchpad]
|
|
| 2 |
+MatchName=PIXA3854:00 093A:0274 Touchpad
|
|
| 3 |
+MatchUdevType=touchpad
|
|
| 4 |
+MatchDMIModalias=dmi:*svnFramework:pnLaptop:*
|
|
| 5 |
+AttrEventCodeDisable=BTN_RIGHT
|
| 1 |
+[Chuwi Gemibook]
|
|
| 2 |
+MatchName=HTIX5288:00 093A:1336 Touchpad
|
|
| 3 |
+MatchUdevType=touchpad
|
|
| 4 |
+AttrEventCodeDisable=BTN_RIGHT
|
|
| 5 |
+ |
|
| 6 |
+[Chuwi AeroBook Plus]
|
|
| 7 |
+MatchName=SYNA3602:01 093A:1336 Touchpad
|
|
| 8 |
+MatchUdevType=touchpad
|
|
| 9 |
+AttrEventCodeDisable=BTN_RIGHT
|
| ... | ... | @@ -82,6 +82,11 @@ MatchName=*DualPoint Stick |
| 82 | 82 |
MatchDMIModalias=dmi:*svnDellInc.:pnLatitudeE7470*
|
| 83 | 83 |
AttrTrackpointMultiplier=0.125
|
| 84 | 84 |
|
| 85 |
+[Latitude 7480 Touchpad]
|
|
| 86 |
+MatchName=DLL07A0*
|
|
| 87 |
+MatchDMIModalias=dmi:**bvnDellInc.:*:pnLatitude7480*
|
|
| 88 |
+AttrPressureRange=35:34
|
|
| 89 |
+ |
|
| 85 | 90 |
[Latitude 7490 Trackpoint]
|
| 86 | 91 |
MatchName=*Mouse
|
| 87 | 92 |
MatchUdevType=pointingstick
|
| 1 |
+# Clickpad that announces BTN_RIGHT
|
|
| 2 |
+# https://bugzilla.redhat.com/show_bug.cgi?id=1972370
|
|
| 3 |
+[Huawei MateBook 2020 Touchpad]
|
|
| 4 |
+MatchName=ELAN2604:00 04F3:3114 Touchpad
|
|
| 5 |
+MatchUdevType=touchpad
|
|
| 6 |
+MatchDMIModalias=dmi:*svnHUAWEI:*pvrM1010*
|
|
| 7 |
+AttrEventCodeDisable=BTN_RIGHT
|
| ... | ... | @@ -144,6 +144,12 @@ MatchVendor=0x06CB |
| 144 | 144 |
MatchProduct=0xCE37
|
| 145 | 145 |
AttrEventCodeDisable=ABS_MT_PRESSURE;ABS_PRESSURE;
|
| 146 | 146 |
|
| 147 |
+[Lenovo Yoga C930 Tablet]
|
|
| 148 |
+MatchBus=i2c
|
|
| 149 |
+MatchVendor=0x056A
|
|
| 150 |
+MatchProduct=0x5196
|
|
| 151 |
+AttrTabletSmoothing=1
|
|
| 152 |
+ |
|
| 147 | 153 |
# Lenovo Carbon X1 6th gen (RMI4 only, PS/2 is broken on this device,
|
| 148 | 154 |
# sends bogus ABS_MT_TOOL_TYPE events for MT_TOOL_PALM
|
| 149 | 155 |
[Lenovo Carbon X1 6th gen]
|
| ... | ... | @@ -162,6 +168,11 @@ MatchName=AT Translated Set 2 keyboard |
| 162 | 168 |
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX60Tablet:*
|
| 163 | 169 |
ModelTabletModeNoSuspend=1
|
| 164 | 170 |
|
| 171 |
+[Lenovo X61 Tablet]
|
|
| 172 |
+MatchName=AT Translated Set 2 keyboard
|
|
| 173 |
+MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX61Tablet:*
|
|
| 174 |
+ModelTabletModeNoSuspend=1
|
|
| 175 |
+ |
|
| 165 | 176 |
# Lenovo X220 Tablet special bezel buttons are associated to the
|
| 166 | 177 |
# keyboard and would therefore mistakenly be deactivated as well.
|
| 167 | 178 |
# See https://gitlab.freedesktop.org/libinput/libinput/issues/154
|
| ... | ... | @@ -237,4 +248,10 @@ MatchVendor=0x27C6 |
| 237 | 248 |
MatchProduct=0x01E8
|
| 238 | 249 |
AttrEventCodeDisable=ABS_MT_PRESSURE;ABS_PRESSURE;
|
| 239 | 250 |
|
| 251 |
+# Duet 7i tablet switch activated by folding keyboard cover, or removing it.
|
|
| 252 |
+# We must not disable volume rocker 'keyboard'.
|
|
| 253 |
+[Lenovo Duet 7i]
|
|
| 254 |
+MatchName=AT Raw Set 2 keyboard
|
|
| 255 |
+MatchDMIModalias=dmi:*svnLENOVO:*pvrYogaDuet713IML05:*
|
|
| 256 |
+ModelTabletModeNoSuspend=1
|
|
| 240 | 257 |
|
| 1 |
+# Clickpad that announces BTN_RIGHT
|
|
| 2 |
+# https://gitlab.freedesktop.org/libinput/libinput/-/issues/629
|
|
| 3 |
+[Librem 14v1 Touchpad]
|
|
| 4 |
+MatchName=HTIX5288:00 0911:5288 Touchpad
|
|
| 5 |
+MatchUdevType=touchpad
|
|
| 6 |
+MatchDMIModalias=dmi:*svnPurism:*pnLibrem14*
|
|
| 7 |
+AttrEventCodeDisable=BTN_RIGHT
|
| ... | ... | @@ -2344,18 +2344,17 @@ tablet_init_left_handed(struct evdev_device *device) |
| 2344 | 2344 |
tablet_change_to_left_handed);
|
| 2345 | 2345 |
}
|
| 2346 | 2346 |
|
| 2347 |
-static void
|
|
| 2348 |
-tablet_init_smoothing(struct evdev_device *device,
|
|
| 2349 |
- struct tablet_dispatch *tablet)
|
|
| 2347 |
+static bool
|
|
| 2348 |
+tablet_is_aes(struct evdev_device *device,
|
|
| 2349 |
+ struct tablet_dispatch *tablet)
|
|
| 2350 | 2350 |
{
|
| 2351 |
- size_t history_size = ARRAY_LENGTH(tablet->history.samples);
|
|
| 2351 |
+ bool is_aes = false;
|
|
| 2352 | 2352 |
#if HAVE_LIBWACOM
|
| 2353 | 2353 |
const char *devnode;
|
| 2354 | 2354 |
WacomDeviceDatabase *db;
|
| 2355 | 2355 |
WacomDevice *libwacom_device = NULL;
|
| 2356 | 2356 |
const int *stylus_ids;
|
| 2357 | 2357 |
int nstyli;
|
| 2358 |
- bool is_aes = false;
|
|
| 2359 | 2358 |
int vid = evdev_device_get_id_vendor(device);
|
| 2360 | 2359 |
|
| 2361 | 2360 |
/* Wacom-specific check for whether smoothing is required:
|
| ... | ... | @@ -2384,12 +2383,36 @@ tablet_init_smoothing(struct evdev_device *device, |
| 2384 | 2383 |
}
|
| 2385 | 2384 |
}
|
| 2386 | 2385 |
|
| 2387 |
- if (is_aes)
|
|
| 2388 |
- history_size = 1;
|
|
| 2389 |
- |
|
| 2390 | 2386 |
libwacom_destroy(libwacom_device);
|
| 2387 |
+ |
|
| 2391 | 2388 |
out:
|
| 2392 | 2389 |
#endif
|
| 2390 |
+ return is_aes;
|
|
| 2391 |
+}
|
|
| 2392 |
+ |
|
| 2393 |
+static void
|
|
| 2394 |
+tablet_init_smoothing(struct evdev_device *device,
|
|
| 2395 |
+ struct tablet_dispatch *tablet)
|
|
| 2396 |
+{
|
|
| 2397 |
+ size_t history_size = ARRAY_LENGTH(tablet->history.samples);
|
|
| 2398 |
+ struct quirks_context *quirks = NULL;
|
|
| 2399 |
+ struct quirks *q = NULL;
|
|
| 2400 |
+ bool use_smoothing = true;
|
|
| 2401 |
+ |
|
| 2402 |
+ quirks = evdev_libinput_context(device)->quirks;
|
|
| 2403 |
+ q = quirks_fetch_for_device(quirks, device->udev_device);
|
|
| 2404 |
+ |
|
| 2405 |
+ /* By default, always enable smoothing except on AES devices.
|
|
| 2406 |
+ * AttrTabletSmoothing can override this, if necessary.
|
|
| 2407 |
+ */
|
|
| 2408 |
+ if (!q || !quirks_get_bool(q, QUIRK_ATTR_TABLET_SMOOTHING, &use_smoothing))
|
|
| 2409 |
+ use_smoothing = !tablet_is_aes(device, tablet);
|
|
| 2410 |
+ |
|
| 2411 |
+ /* Setting the history size to 1 means we never do any actual smoothing. */
|
|
| 2412 |
+ if (!use_smoothing)
|
|
| 2413 |
+ history_size = 1;
|
|
| 2414 |
+ |
|
| 2415 |
+ quirks_unref(q);
|
|
| 2393 | 2416 |
tablet->history.size = history_size;
|
| 2394 | 2417 |
}
|
| 2395 | 2418 |
|
| ... | ... | @@ -280,6 +280,7 @@ quirk_get_name(enum quirk q) |
| 280 | 280 |
case QUIRK_ATTR_TRACKPOINT_MULTIPLIER: return "AttrTrackpointMultiplier";
|
| 281 | 281 |
case QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD: return "AttrThumbPressureThreshold";
|
| 282 | 282 |
case QUIRK_ATTR_USE_VELOCITY_AVERAGING: return "AttrUseVelocityAveraging";
|
| 283 |
+ case QUIRK_ATTR_TABLET_SMOOTHING: return "AttrTabletSmoothing";
|
|
| 283 | 284 |
case QUIRK_ATTR_THUMB_SIZE_THRESHOLD: return "AttrThumbSizeThreshold";
|
| 284 | 285 |
case QUIRK_ATTR_MSC_TIMESTAMP: return "AttrMscTimestamp";
|
| 285 | 286 |
case QUIRK_ATTR_EVENT_CODE_DISABLE: return "AttrEventCodeDisable";
|
| ... | ... | @@ -796,6 +797,17 @@ parse_attr(struct quirks_context *ctx, |
| 796 | 797 |
p->type = PT_BOOL;
|
| 797 | 798 |
p->value.b = b;
|
| 798 | 799 |
rc = true;
|
| 800 |
+ } else if (streq(key, quirk_get_name(QUIRK_ATTR_TABLET_SMOOTHING))) {
|
|
| 801 |
+ p->id = QUIRK_ATTR_TABLET_SMOOTHING;
|
|
| 802 |
+ if (streq(value, "1"))
|
|
| 803 |
+ b = true;
|
|
| 804 |
+ else if (streq(value, "0"))
|
|
| 805 |
+ b = false;
|
|
| 806 |
+ else
|
|
| 807 |
+ goto out;
|
|
| 808 |
+ p->type = PT_BOOL;
|
|
| 809 |
+ p->value.b = b;
|
|
| 810 |
+ rc = true;
|
|
| 799 | 811 |
} else if (streq(key, quirk_get_name(QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD))) {
|
| 800 | 812 |
p->id = QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD;
|
| 801 | 813 |
if (!safe_atou(value, &v))
|
| ... | ... | @@ -103,6 +103,7 @@ enum quirk { |
| 103 | 103 |
QUIRK_ATTR_TRACKPOINT_MULTIPLIER,
|
| 104 | 104 |
QUIRK_ATTR_THUMB_PRESSURE_THRESHOLD,
|
| 105 | 105 |
QUIRK_ATTR_USE_VELOCITY_AVERAGING,
|
| 106 |
+ QUIRK_ATTR_TABLET_SMOOTHING,
|
|
| 106 | 107 |
QUIRK_ATTR_THUMB_SIZE_THRESHOLD,
|
| 107 | 108 |
QUIRK_ATTR_MSC_TIMESTAMP,
|
| 108 | 109 |
QUIRK_ATTR_EVENT_CODE_DISABLE,
|
| ... | ... | @@ -732,6 +732,7 @@ tools_list_device_quirks(struct quirks_context *ctx, |
| 732 | 732 |
callback(userdata, buf);
|
| 733 | 733 |
break;
|
| 734 | 734 |
case QUIRK_ATTR_USE_VELOCITY_AVERAGING:
|
| 735 |
+ case QUIRK_ATTR_TABLET_SMOOTHING:
|
|
| 735 | 736 |
snprintf(buf, sizeof(buf), "%s=1", name);
|
| 736 | 737 |
callback(userdata, buf);
|
| 737 | 738 |
break;
|