mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-26 20:30:36 +01:00
Compare commits
8 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6df5169229 | ||
|
|
4f2f1d29ec | ||
|
|
4c1862c1e4 | ||
|
|
a49826a7a8 | ||
|
|
f905054b5b | ||
|
|
b8f90d074e | ||
|
|
7624497df5 | ||
|
|
1ca2f11524 |
8 changed files with 152 additions and 8 deletions
|
|
@ -163,12 +163,35 @@ __all_seats()
|
|||
':device:_files -W /dev/input/ -P /dev/input/'
|
||||
}
|
||||
|
||||
(( $+functions[_libinput_analyze_per-slot-delta] )) || _libinput_analyze_per-slot-delta()
|
||||
{
|
||||
_arguments \
|
||||
'--help[Show help message and exit]' \
|
||||
':recording:_files'
|
||||
}
|
||||
|
||||
(( $+functions[_libinput_analyze_touch-down-state] )) || _libinput_analyze_touch-down-state()
|
||||
{
|
||||
_arguments \
|
||||
'--help[Show help message and exit]' \
|
||||
':recording:_files'
|
||||
}
|
||||
|
||||
(( $+functions[_libinput_analyze_recording] )) || _libinput_analyze_recording()
|
||||
{
|
||||
_arguments \
|
||||
'--help[Show help message and exit]' \
|
||||
':recording:_files'
|
||||
}
|
||||
|
||||
(( $+functions[_libinput_analyze] )) || _libinput_analyze()
|
||||
{
|
||||
local curcontext=$curcontext state line ret=1
|
||||
local features
|
||||
features=(
|
||||
"per-slot-delta:analyze relative movement per touch per slot"
|
||||
"recording:analyze a recording by printing a pretty table"
|
||||
"touch-down-state:analyze a recording for logical touch down states"
|
||||
)
|
||||
|
||||
_arguments -C \
|
||||
|
|
|
|||
|
|
@ -27,6 +27,11 @@ libinput applies a dpi-dependent acceleration function. At low speeds, a
|
|||
movement speed increases, acceleration is applied - at high speeds a low-dpi
|
||||
device will roughly feel the same as a higher-dpi mouse.
|
||||
|
||||
The reason for the normalization is convenience: a caller can assume that a
|
||||
delta of 1 should result in a movement of 1 pixel on a traditional
|
||||
(low-dpi) screen. On screens with high resolutions, the caller must scale
|
||||
according to the UI scale factors.
|
||||
|
||||
This normalization only applies to accelerated coordinates, unaccelerated
|
||||
coordinates are left in device-units. It is up to the caller to interpret
|
||||
those coordinates correctly.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
project('libinput', 'c',
|
||||
version : '1.17.0',
|
||||
version : '1.17.1',
|
||||
license : 'MIT/Expat',
|
||||
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.47.0')
|
||||
|
|
|
|||
|
|
@ -27,6 +27,12 @@ AttrTouchSizeRange=150:130
|
|||
MatchName=*Apple Inc. Apple Internal Keyboard*
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
[Apple Internal Keyboard (SPI)]
|
||||
MatchUdevType=keyboard
|
||||
MatchBus=spi
|
||||
MatchVendor=0x5AC
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
# The Apple MagicMouse has a touchpad built-in but the kernel still
|
||||
# emulates a full 2/3 button mouse for us. Ignore anything from the
|
||||
# ABS interface
|
||||
|
|
@ -89,3 +95,22 @@ MatchBus=usb
|
|||
MatchVendor=0x5AC
|
||||
MatchProduct=0x0262
|
||||
AttrPalmSizeThreshold=1600
|
||||
|
||||
[Apple Laptop Touchpad (SPI)]
|
||||
MatchUdevType=touchpad
|
||||
MatchBus=spi
|
||||
MatchVendor=0x5AC
|
||||
ModelAppleTouchpad=1
|
||||
AttrSizeHint=104x75
|
||||
AttrTouchSizeRange=150:130
|
||||
AttrPalmSizeThreshold=1600
|
||||
|
||||
# The Linux applespi driver currently uses the Synaptics vendor for some reason
|
||||
[Apple Laptop Touchpad (SPI)]
|
||||
MatchUdevType=touchpad
|
||||
MatchBus=spi
|
||||
MatchVendor=0x6CB
|
||||
ModelAppleTouchpad=1
|
||||
AttrSizeHint=104x75
|
||||
AttrTouchSizeRange=150:130
|
||||
AttrPalmSizeThreshold=1600
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ ModelChromebook=1
|
|||
|
||||
[Google Chromebook Eve]
|
||||
MatchUdevType=touchpad
|
||||
MatchName=ACPI0C50:00 18D1:5028
|
||||
MatchName=ACPI0C50:00 18D1:5028*
|
||||
MatchDMIModalias=dmi:*svnGoogle:pnEve*
|
||||
ModelChromebook=1
|
||||
AttrPressureRange=6:4
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ ModelHPPavilionDM4Touchpad=1
|
|||
# Touchpad is a clickpad but INPUT_PROP_BUTTONPAD is not set, see
|
||||
# https://bugs.freedesktop.org/show_bug.cgi?id=97147
|
||||
[HP Stream 11]
|
||||
MatchName=SYN1EDE:00 06CB:7442
|
||||
MatchName=SYN1EDE:00 06CB:7442*
|
||||
MatchDMIModalias=dmi:*svnHewlett-Packard:pnHPStreamNotebookPC11*
|
||||
AttrInputPropEnable=INPUT_PROP_BUTTONPAD
|
||||
|
||||
|
|
|
|||
|
|
@ -205,3 +205,19 @@ ModelTabletModeNoSuspend=1
|
|||
MatchName=AT Raw Set 2 keyboard
|
||||
MatchDMIModalias=dmi:*svnLENOVO:*pvrThinkPadX1Tablet:*
|
||||
ModelTabletModeNoSuspend=1
|
||||
|
||||
# Misidentified as an external keyboard by libinput
|
||||
# Tested on Legion 5 15AR05H
|
||||
[Lenovo Legion 5 Keyboard]
|
||||
MatchUdevType=keyboard
|
||||
MatchBus=usb
|
||||
MatchVendor=0x048D
|
||||
MatchProduct=0xC100
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
[Lenovo Legion 5 Keyboard]
|
||||
MatchUdevType=keyboard
|
||||
MatchBus=usb
|
||||
MatchVendor=0x048D
|
||||
MatchProduct=0xC955
|
||||
AttrKeyboardIntegration=internal
|
||||
|
|
|
|||
85
src/quirks.c
85
src/quirks.c
|
|
@ -35,6 +35,9 @@
|
|||
#include <dirent.h>
|
||||
#include <fnmatch.h>
|
||||
#include <libgen.h>
|
||||
#ifdef __FreeBSD__
|
||||
#include <kenv.h>
|
||||
#endif
|
||||
|
||||
#include "libinput-versionsort.h"
|
||||
#include "libinput-util.h"
|
||||
|
|
@ -111,6 +114,7 @@ enum bustype {
|
|||
BT_PS2,
|
||||
BT_RMI,
|
||||
BT_I2C,
|
||||
BT_SPI,
|
||||
};
|
||||
|
||||
enum udev_type {
|
||||
|
|
@ -352,10 +356,11 @@ property_cleanup(struct property *p)
|
|||
}
|
||||
|
||||
/**
|
||||
* Return the dmi modalias from the udev device.
|
||||
* Return the system DMI info in modalias format.
|
||||
*/
|
||||
#ifdef __linux__
|
||||
static inline char *
|
||||
init_dmi(void)
|
||||
init_dmi_linux(void)
|
||||
{
|
||||
struct udev *udev;
|
||||
struct udev_device *udev_device;
|
||||
|
|
@ -363,9 +368,6 @@ init_dmi(void)
|
|||
char *copy = NULL;
|
||||
const char *syspath = "/sys/devices/virtual/dmi/id";
|
||||
|
||||
if (getenv("LIBINPUT_RUNNING_TEST_SUITE"))
|
||||
return safe_strdup("dmi:");
|
||||
|
||||
udev = udev_new();
|
||||
if (!udev)
|
||||
return NULL;
|
||||
|
|
@ -388,6 +390,73 @@ init_dmi(void)
|
|||
|
||||
return copy;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
static inline char *
|
||||
init_dmi_freebsd(void)
|
||||
{
|
||||
#define LEN (KENV_MVALLEN + 1)
|
||||
char *modalias;
|
||||
char bios_vendor[LEN], bios_version[LEN], bios_date[LEN];
|
||||
char sys_vendor[LEN], product_name[LEN], product_version[LEN];
|
||||
char board_vendor[LEN], board_name[LEN], board_version[LEN];
|
||||
char chassis_vendor[LEN], chassis_type[LEN], chassis_version[LEN];
|
||||
int chassis_type_num = 0x2;
|
||||
|
||||
kenv(KENV_GET, "smbios.bios.vendor", bios_vendor, LEN);
|
||||
kenv(KENV_GET, "smbios.bios.version", bios_version, LEN);
|
||||
kenv(KENV_GET, "smbios.bios.reldate", bios_date, LEN);
|
||||
kenv(KENV_GET, "smbios.system.maker", sys_vendor, LEN);
|
||||
kenv(KENV_GET, "smbios.system.product", product_name, LEN);
|
||||
kenv(KENV_GET, "smbios.system.version", product_version, LEN);
|
||||
kenv(KENV_GET, "smbios.planar.maker", board_vendor, LEN);
|
||||
kenv(KENV_GET, "smbios.planar.product", board_name, LEN);
|
||||
kenv(KENV_GET, "smbios.planar.version", board_version, LEN);
|
||||
kenv(KENV_GET, "smbios.chassis.vendor", chassis_vendor, LEN);
|
||||
kenv(KENV_GET, "smbios.chassis.type", chassis_type, LEN);
|
||||
kenv(KENV_GET, "smbios.chassis.version", chassis_version, LEN);
|
||||
#undef LEN
|
||||
|
||||
if (strcmp(chassis_type, "Desktop") == 0)
|
||||
chassis_type_num = 0x3;
|
||||
else if (strcmp(chassis_type, "Portable") == 0)
|
||||
chassis_type_num = 0x8;
|
||||
else if (strcmp(chassis_type, "Laptop") == 0)
|
||||
chassis_type_num = 0x9;
|
||||
else if (strcmp(chassis_type, "Notebook") == 0)
|
||||
chassis_type_num = 0xA;
|
||||
else if (strcmp(chassis_type, "Tablet") == 0)
|
||||
chassis_type_num = 0x1E;
|
||||
else if (strcmp(chassis_type, "Convertible") == 0)
|
||||
chassis_type_num = 0x1F;
|
||||
else if (strcmp(chassis_type, "Detachable") == 0)
|
||||
chassis_type_num = 0x20;
|
||||
|
||||
xasprintf(&modalias,
|
||||
"dmi:bvn%s:bvr%s:bd%s:svn%s:pn%s:pvr%s:rvn%s:rn%s:rvr%s:cvn%s:ct%d:cvr%s:",
|
||||
bios_vendor, bios_version, bios_date, sys_vendor, product_name,
|
||||
product_version, board_vendor, board_name, board_version, chassis_vendor,
|
||||
chassis_type_num, chassis_version);
|
||||
|
||||
return modalias;
|
||||
}
|
||||
#endif
|
||||
|
||||
static inline char *
|
||||
init_dmi(void)
|
||||
{
|
||||
if (getenv("LIBINPUT_RUNNING_TEST_SUITE"))
|
||||
return safe_strdup("dmi:");
|
||||
|
||||
#if defined(__linux__)
|
||||
return init_dmi_linux();
|
||||
#elif defined(__FreeBSD__)
|
||||
return init_dmi_freebsd();
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the dt compatible string
|
||||
|
|
@ -499,6 +568,8 @@ parse_match(struct quirks_context *ctx,
|
|||
s->match.bus = BT_RMI;
|
||||
else if (streq(value, "i2c"))
|
||||
s->match.bus = BT_I2C;
|
||||
else if (streq(value, "spi"))
|
||||
s->match.bus = BT_SPI;
|
||||
else
|
||||
goto out;
|
||||
} else if (streq(key, "MatchVendor")) {
|
||||
|
|
@ -1241,6 +1312,10 @@ match_fill_bus_vid_pid(struct match *m,
|
|||
m->bus = BT_I2C;
|
||||
m->bits |= M_BUS;
|
||||
break;
|
||||
case BUS_SPI:
|
||||
m->bus = BT_SPI;
|
||||
m->bits |= M_BUS;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue