mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-22 08:00:40 +01:00
Compare commits
27 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ef9624a16b | ||
|
|
dcbfbc4cf1 | ||
|
|
ad857a51a4 | ||
|
|
a521d054d4 | ||
|
|
f86d5ab2ab | ||
|
|
32fd9ec95f | ||
|
|
45150cc6ec | ||
|
|
c8c1c07a2a | ||
|
|
b1f478b897 | ||
|
|
333d7131ab | ||
|
|
cd9d6c66fd | ||
|
|
a0dc0997f5 | ||
|
|
c6813dc7d8 | ||
|
|
8dd25ece10 | ||
|
|
43547b461b | ||
|
|
2ddc734114 | ||
|
|
819e943ab0 | ||
|
|
1c82aa1659 | ||
|
|
526130fe8d | ||
|
|
b95840d36e | ||
|
|
7726350420 | ||
|
|
cdcb827365 | ||
|
|
0a3ecbea24 | ||
|
|
db62bf7ab1 | ||
|
|
9eae99d4fe | ||
|
|
a86b8a0008 | ||
|
|
3428edf1ea |
137 changed files with 950 additions and 147 deletions
|
|
@ -45,6 +45,7 @@ __all_seats()
|
||||||
'--verbose[Use verbose output]' \
|
'--verbose[Use verbose output]' \
|
||||||
'--show-keycodes[Make all keycodes visible]' \
|
'--show-keycodes[Make all keycodes visible]' \
|
||||||
'--grab[Exclusively grab all opened devices]' \
|
'--grab[Exclusively grab all opened devices]' \
|
||||||
|
'--compress-motion-events[Compress repeated motion events on a TTY]' \
|
||||||
'--device=[Use the given device with the path backend]:device:_files -W /dev/input/ -P /dev/input/' \
|
'--device=[Use the given device with the path backend]:device:_files -W /dev/input/ -P /dev/input/' \
|
||||||
'--udev=[Listen for notifications on the given seat]:seat:__all_seats' \
|
'--udev=[Listen for notifications on the given seat]:seat:__all_seats' \
|
||||||
'--apply-to=[Apply configuration options where the device name matches the pattern]:pattern' \
|
'--apply-to=[Apply configuration options where the device name matches the pattern]:pattern' \
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,12 @@ button lock, the button is now considered logically held down. Pressing and
|
||||||
releasing the button a second time logically releases the button. While the
|
releasing the button a second time logically releases the button. While the
|
||||||
button is logically held down, motion events are converted to scroll events.
|
button is logically held down, motion events are converted to scroll events.
|
||||||
|
|
||||||
|
If the button is held and used to scroll for longer than a short grace
|
||||||
|
period, releasing the button does not engage the lock. This allows
|
||||||
|
hold-to-scroll for short, precise adjustments without accidentally toggling
|
||||||
|
the lock. A quick click or a brief scroll within the grace period still
|
||||||
|
engages the lock as normal.
|
||||||
|
|
||||||
.. _scroll_sources:
|
.. _scroll_sources:
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,9 @@
|
||||||
Switches
|
Switches
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
libinput supports the lid and tablet-mode switches. Unlike button events
|
libinput supports the lid, tablet-mode, and keypad slide switches. Unlike
|
||||||
that come in press and release pairs, switches are usually toggled once and
|
button events that come in press and release pairs, switches are usually
|
||||||
left at the setting for an extended period of time.
|
toggled once and left at the setting for an extended period of time.
|
||||||
|
|
||||||
Only some switches are handled by libinput, see **libinput_switch** for a
|
Only some switches are handled by libinput, see **libinput_switch** for a
|
||||||
list of supported switches. Switch events are exposed to the caller, but
|
list of supported switches. Switch events are exposed to the caller, but
|
||||||
|
|
@ -59,3 +59,20 @@ tablet mode is disengaged.
|
||||||
|
|
||||||
This handling of tablet mode switches is transparent to the user, no
|
This handling of tablet mode switches is transparent to the user, no
|
||||||
notifications are sent and the device appears as enabled at all times.
|
notifications are sent and the device appears as enabled at all times.
|
||||||
|
|
||||||
|
.. _switches_keypad_slide:
|
||||||
|
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
Keypad slide switch handling
|
||||||
|
------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Where available, libinput listens to devices providing a keypad slide switch.
|
||||||
|
This is usually available on devices that have an always-attached physical
|
||||||
|
keyboard which can slide under the screen. An example of such a device is the
|
||||||
|
Nokia N900.
|
||||||
|
|
||||||
|
The event sent by the kernel is ``EV_SW`` ``SW_KEYPAD_SLIDE`` and is provided
|
||||||
|
as **LIBINPUT_SWITCH_KEYPAD_SLIDE**. The keypad slide switch does not cause any
|
||||||
|
other input devices to be enabled nor disabled in response, since on some
|
||||||
|
devices the kernel event is sent while the keyboard is partially visible and
|
||||||
|
thus usable.
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ and product name (pn).
|
||||||
Once in place, run the following command to verify the quirk is valid and
|
Once in place, run the following command to verify the quirk is valid and
|
||||||
works for your device: ::
|
works for your device: ::
|
||||||
|
|
||||||
$ sudo libinput list-quirks /dev/input/event10
|
$ sudo libinput quirks list /dev/input/event10
|
||||||
AttrPressureRange=10:8
|
AttrPressureRange=10:8
|
||||||
|
|
||||||
Replace the event node with the one from your device. If the
|
Replace the event node with the one from your device. If the
|
||||||
|
|
@ -218,7 +218,7 @@ and product name (pn).
|
||||||
Once in place, run the following command to verify the quirk is valid and
|
Once in place, run the following command to verify the quirk is valid and
|
||||||
works for your device: ::
|
works for your device: ::
|
||||||
|
|
||||||
$ sudo libinput list-quirks /dev/input/event10
|
$ sudo libinput quirks list /dev/input/event10
|
||||||
AttrTouchSizeRange=10:8
|
AttrTouchSizeRange=10:8
|
||||||
|
|
||||||
Replace the event node with the one from your device. If the
|
Replace the event node with the one from your device. If the
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ Handled device types
|
||||||
- Mice
|
- Mice
|
||||||
- Keyboards
|
- Keyboards
|
||||||
- Virtual absolute pointing devices such as those used by QEMU or VirtualBox
|
- Virtual absolute pointing devices such as those used by QEMU or VirtualBox
|
||||||
- Switches (Lid Switch and Tablet Mode switch)
|
- Switches (Lid Switch, Tablet Mode switch, and Keypad Slide switch)
|
||||||
- Graphics tablets
|
- Graphics tablets
|
||||||
- :ref:`Trackpoints`
|
- :ref:`Trackpoints`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -766,7 +766,7 @@ executable('ptraccel-debug',
|
||||||
if is_debug_build
|
if is_debug_build
|
||||||
config_tool_option_test = configuration_data()
|
config_tool_option_test = configuration_data()
|
||||||
config_tool_option_test.set('DISABLE_WARNING', 'yes')
|
config_tool_option_test.set('DISABLE_WARNING', 'yes')
|
||||||
config_tool_option_test.set('MESON_ENABLED_DEBUG_GUI', get_option('debug-gui'))
|
config_tool_option_test.set('MESON_ENABLED_DEBUG_GUI', get_option('debug-gui').to_string())
|
||||||
config_tool_option_test.set('MESON_BUILD_ROOT', meson.current_build_dir())
|
config_tool_option_test.set('MESON_BUILD_ROOT', meson.current_build_dir())
|
||||||
config_tool_option_test.set('TOOL_PATH', libinput_tool.full_path())
|
config_tool_option_test.set('TOOL_PATH', libinput_tool.full_path())
|
||||||
tool_option_test = configure_file(input: 'tools/test_tool_option_parsing.py',
|
tool_option_test = configure_file(input: 'tools/test_tool_option_parsing.py',
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,15 @@
|
||||||
|
|
||||||
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
# Match vid and pid as it can have other names.
|
# Match vid and pid as it can have other names.
|
||||||
|
[Goodix Haptic Touchpad (27C6:01E7)]
|
||||||
|
MatchBus=i2c
|
||||||
|
MatchVendor=0x27C6
|
||||||
|
MatchProduct=0x01E7
|
||||||
|
MatchUdevType=touchpad
|
||||||
|
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
||||||
|
|
||||||
|
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
|
# GXTP5100:00 27C6:01E8 Touchpad
|
||||||
[Goodix Haptic Touchpad (27C6:01E8)]
|
[Goodix Haptic Touchpad (27C6:01E8)]
|
||||||
MatchBus=i2c
|
MatchBus=i2c
|
||||||
MatchVendor=0x27C6
|
MatchVendor=0x27C6
|
||||||
|
|
@ -9,6 +18,33 @@ MatchProduct=0x01E8
|
||||||
MatchUdevType=touchpad
|
MatchUdevType=touchpad
|
||||||
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
||||||
|
|
||||||
|
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
|
# GXTP5100:00 27C6:01E9 Touchpad
|
||||||
|
[Goodix Haptic Touchpad (27C6:01E9)]
|
||||||
|
MatchBus=i2c
|
||||||
|
MatchVendor=0x27C6
|
||||||
|
MatchProduct=0x01E9
|
||||||
|
MatchUdevType=touchpad
|
||||||
|
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
||||||
|
|
||||||
|
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
|
# GXTP5100:00 27C6:01EA Touchpad
|
||||||
|
[Goodix Haptic Touchpad (27C6:01EA)]
|
||||||
|
MatchBus=i2c
|
||||||
|
MatchVendor=0x27C6
|
||||||
|
MatchProduct=0x01EA
|
||||||
|
MatchUdevType=touchpad
|
||||||
|
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
||||||
|
|
||||||
|
# "GXTP5100 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
|
# GXTP5100:00 27C6:01EB Touchpad
|
||||||
|
[Goodix Haptic Touchpad (27C6:01EB)]
|
||||||
|
MatchBus=i2c
|
||||||
|
MatchVendor=0x27C6
|
||||||
|
MatchProduct=0x01EB
|
||||||
|
MatchUdevType=touchpad
|
||||||
|
AttrInputProp=+INPUT_PROP_PRESSUREPAD
|
||||||
|
|
||||||
# "GXTP5420 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
# "GXTP5420 Touchpad": pressure touchpad mostly used in Lenovo laptops.
|
||||||
# GXTP5420:00 27C6:0F95 Touchpad
|
# GXTP5420:00 27C6:0F95 Touchpad
|
||||||
[Goodix Haptic Touchpad (27C6:0F95)]
|
[Goodix Haptic Touchpad (27C6:0F95)]
|
||||||
|
|
|
||||||
|
|
@ -11,15 +11,10 @@ AttrLidSwitchReliability=write_open
|
||||||
# - Surface Laptop 3: Microsoft Surface 045E:09AE Keyboard
|
# - Surface Laptop 3: Microsoft Surface 045E:09AE Keyboard
|
||||||
# - Surface Book 2: Microsoft Surface Keyboard
|
# - Surface Book 2: Microsoft Surface Keyboard
|
||||||
[Microsoft Surface Keyboard]
|
[Microsoft Surface Keyboard]
|
||||||
MatchName=*Microsoft Surface *Keyboard*
|
MatchName=Microsoft Surface *Keyboard
|
||||||
MatchDMIModalias=dmi:*:svnMicrosoftCorporation:*
|
MatchDMIModalias=dmi:*:svnMicrosoftCorporation:*
|
||||||
AttrKeyboardIntegration=internal
|
|
||||||
|
|
||||||
[Microsoft Surface Cover]
|
|
||||||
MatchName=*Microsoft Surface *Cover*
|
|
||||||
MatchDMIModalias=dmi:*:svnMicrosoftCorporation:*
|
|
||||||
AttrKeyboardIntegration=internal
|
|
||||||
AttrEventCode=-BTN_0;
|
AttrEventCode=-BTN_0;
|
||||||
|
AttrKeyboardIntegration=internal
|
||||||
|
|
||||||
[Microsoft Surface Laptop Studio Touchpad]
|
[Microsoft Surface Laptop Studio Touchpad]
|
||||||
MatchVendor=0x045E
|
MatchVendor=0x045E
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ AttrThumbSizeThreshold=700
|
||||||
MatchBus=usb
|
MatchBus=usb
|
||||||
MatchVendor=0x05AC
|
MatchVendor=0x05AC
|
||||||
MatchProduct=0x0324
|
MatchProduct=0x0324
|
||||||
|
AttrSizeHint=162x115
|
||||||
AttrTouchSizeRange=20:10
|
AttrTouchSizeRange=20:10
|
||||||
AttrPressureRange=3:0
|
AttrPressureRange=3:0
|
||||||
AttrPalmSizeThreshold=900
|
AttrPalmSizeThreshold=900
|
||||||
|
|
|
||||||
|
|
@ -24,28 +24,27 @@ MatchName=*Intel Virtual Button*
|
||||||
MatchDMIModalias=dmi:*:svnHP:pnHPElitex21013G3:*
|
MatchDMIModalias=dmi:*:svnHP:pnHPElitex21013G3:*
|
||||||
ModelTabletModeSwitchUnreliable=1
|
ModelTabletModeSwitchUnreliable=1
|
||||||
|
|
||||||
# The HP OmniBook Ultra Flip Laptop 14-fh0xxx's custom Intel ISH firmware
|
# The HP OmniBook Ultra Flip 14 toggles tablet mode at a little less than 180
|
||||||
# filters out events from its builtin keyboard and touchpad when the hinge is
|
# degrees and hardware switches off inputs at a little more than 180 degrees.
|
||||||
# opened little more than 180 degrees but toggles tablet-mode when it's opened
|
# We don't suspend ourselves to allow using them in flat position. It is
|
||||||
# little less than 180 degrees.
|
# possible that HP fixes this in the future (i.e. so tablet mode toggles
|
||||||
# Do not suspend the keyboard and touchpad to let use the device in flat
|
# after 180 degrees) so check before removing these rules.
|
||||||
# position and also give consistency with some keyboard keys controlled by the
|
# This rule is for the keyboard and...
|
||||||
# Video Bus device (brightness down/up), the HP WMI hotkeys device (mic mute and
|
[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Keyboard]
|
||||||
# hp hubs launcher key) and the backlight getting on and off by the firmware at
|
|
||||||
# the same time it enables disables the input.
|
|
||||||
# This one is for the keyboard and...
|
|
||||||
[HP OmniBook Ultra Flip Laptop 14-fh0xxx Keyboard]
|
|
||||||
MatchBus=ps2
|
MatchBus=ps2
|
||||||
MatchUdevType=keyboard
|
MatchUdevType=keyboard
|
||||||
MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:*
|
MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:*
|
||||||
ModelTabletModeNoSuspend=1
|
ModelTabletModeNoSuspend=1
|
||||||
|
|
||||||
# ...this one is for the touchpad.
|
# ...this rule is for the touchpad.
|
||||||
[HP OmniBook Ultra Flip Laptop 14-fh0xxx Touchpad]
|
[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Touchpad]
|
||||||
MatchBus=i2c
|
MatchBus=i2c
|
||||||
MatchUdevType=touchpad
|
MatchUdevType=touchpad
|
||||||
MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:*
|
MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:*
|
||||||
ModelTabletModeNoSuspend=1
|
ModelTabletModeNoSuspend=1
|
||||||
|
AttrPressureRange=15:5
|
||||||
|
AttrThumbPressureThreshold=80
|
||||||
|
AttrPalmPressureThreshold=125
|
||||||
|
|
||||||
[HP Pavilion dm4]
|
[HP Pavilion dm4]
|
||||||
MatchName=*SynPS/2 Synaptics TouchPad
|
MatchName=*SynPS/2 Synaptics TouchPad
|
||||||
|
|
|
||||||
|
|
@ -82,10 +82,10 @@ files will not be used.
|
||||||
Debugging
|
Debugging
|
||||||
---------
|
---------
|
||||||
|
|
||||||
When modifying a data file, use the `libinput list-quirks` tool to
|
When modifying a data file, use the `libinput quirks list` tool to
|
||||||
verify the changes. The tool can be pointed at the data directory to
|
verify the changes. The tool can be pointed at the data directory to
|
||||||
analyse, use `--verbose` to get more info. For example:
|
analyse, use `--verbose` to get more info. For example:
|
||||||
|
|
||||||
```
|
```
|
||||||
libinput list-quirks --data-dir /path/to/git/repo/quirks/ --verbose /dev/input/event0
|
libinput quirks list --data-dir /path/to/git/repo/quirks/ --verbose /dev/input/event0
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -332,9 +332,9 @@ evdev_usage_is_button(evdev_usage_t usage)
|
||||||
case EVDEV_BTN_TOOL_FINGER:
|
case EVDEV_BTN_TOOL_FINGER:
|
||||||
case EVDEV_BTN_TOUCH:
|
case EVDEV_BTN_TOUCH:
|
||||||
return false;
|
return false;
|
||||||
case BTN_STYLUS:
|
case EVDEV_BTN_STYLUS:
|
||||||
case BTN_STYLUS2:
|
case EVDEV_BTN_STYLUS2:
|
||||||
case BTN_STYLUS3:
|
case EVDEV_BTN_STYLUS3:
|
||||||
return true;
|
return true;
|
||||||
case EVDEV_BTN_MISC ... EVDEV_BTN_DIGI - 1:
|
case EVDEV_BTN_MISC ... EVDEV_BTN_DIGI - 1:
|
||||||
case EVDEV_BTN_WHEEL ... EVDEV_BTN_GEAR_UP:
|
case EVDEV_BTN_WHEEL ... EVDEV_BTN_GEAR_UP:
|
||||||
|
|
@ -550,10 +550,12 @@ evdev_frame_append(struct evdev_frame *frame,
|
||||||
size_t nevents)
|
size_t nevents)
|
||||||
{
|
{
|
||||||
assert(nevents > 0);
|
assert(nevents > 0);
|
||||||
|
int syn_report_value = 0;
|
||||||
|
|
||||||
for (size_t i = 0; i < nevents; i++) {
|
for (size_t i = 0; i < nevents; i++) {
|
||||||
if (evdev_usage_eq(events[i].usage, EVDEV_SYN_REPORT)) {
|
if (evdev_usage_eq(events[i].usage, EVDEV_SYN_REPORT)) {
|
||||||
nevents = i;
|
nevents = i;
|
||||||
|
syn_report_value = events[i].value;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -568,14 +570,24 @@ evdev_frame_append(struct evdev_frame *frame,
|
||||||
frame->count += nevents;
|
frame->count += nevents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
frame->events[frame->count - 1] = (struct evdev_event){
|
||||||
|
.usage = evdev_usage_from_uint32_t(EVDEV_SYN_REPORT),
|
||||||
|
.value = syn_report_value,
|
||||||
|
};
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
evdev_frame_append_one(struct evdev_frame *frame, evdev_usage_t usage, int32_t value)
|
evdev_frame_append_one(struct evdev_frame *frame, evdev_usage_t usage, int32_t value)
|
||||||
{
|
{
|
||||||
if (evdev_usage_eq(usage, EVDEV_SYN_REPORT))
|
if (evdev_usage_eq(usage, EVDEV_SYN_REPORT)) {
|
||||||
|
frame->events[frame->count - 1] = (struct evdev_event){
|
||||||
|
.usage = evdev_usage_from_uint32_t(EVDEV_SYN_REPORT),
|
||||||
|
.value = value,
|
||||||
|
};
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (frame->count >= frame->max_size)
|
if (frame->count >= frame->max_size)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
|
||||||
|
|
@ -2678,6 +2678,22 @@ evdev_tag_touchpad(struct evdev_device *device, struct udev_device *udev_device)
|
||||||
int bustype, vendor;
|
int bustype, vendor;
|
||||||
const char *prop;
|
const char *prop;
|
||||||
|
|
||||||
|
prop = udev_device_get_property_value(udev_device, "ID_INTEGRATION");
|
||||||
|
if (prop) {
|
||||||
|
if (streq(prop, "internal")) {
|
||||||
|
evdev_tag_touchpad_internal(device);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (streq(prop, "external")) {
|
||||||
|
evdev_tag_touchpad_external(device);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
evdev_log_info(device, "tagged with unknown value %s\n", prop);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fall back to ID_TOUCHPAD_INTEGRATION if ID_INTEGRATION is missing */
|
||||||
prop = udev_device_get_property_value(udev_device,
|
prop = udev_device_get_property_value(udev_device,
|
||||||
"ID_INPUT_TOUCHPAD_INTEGRATION");
|
"ID_INPUT_TOUCHPAD_INTEGRATION");
|
||||||
if (prop) {
|
if (prop) {
|
||||||
|
|
|
||||||
|
|
@ -1311,18 +1311,6 @@ eraser_button_get_default_mode(struct libinput_tablet_tool *tool)
|
||||||
static enum libinput_config_status
|
static enum libinput_config_status
|
||||||
eraser_button_set_button(struct libinput_tablet_tool *tool, uint32_t button)
|
eraser_button_set_button(struct libinput_tablet_tool *tool, uint32_t button)
|
||||||
{
|
{
|
||||||
switch (button) {
|
|
||||||
case BTN_STYLUS:
|
|
||||||
case BTN_STYLUS2:
|
|
||||||
case BTN_STYLUS3:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
log_bug_libinput(libinput_device_get_context(tool->last_device),
|
|
||||||
"Unsupported eraser button 0x%x",
|
|
||||||
button);
|
|
||||||
return LIBINPUT_CONFIG_STATUS_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
tool->eraser_button.want_button = button;
|
tool->eraser_button.want_button = button;
|
||||||
|
|
||||||
eraser_button_toggle(tool);
|
eraser_button_toggle(tool);
|
||||||
|
|
|
||||||
38
src/evdev.c
38
src/evdev.c
|
|
@ -54,6 +54,7 @@
|
||||||
|
|
||||||
#define DEFAULT_WHEEL_CLICK_ANGLE 15
|
#define DEFAULT_WHEEL_CLICK_ANGLE 15
|
||||||
#define DEFAULT_BUTTON_SCROLL_TIMEOUT usec_from_millis(200)
|
#define DEFAULT_BUTTON_SCROLL_TIMEOUT usec_from_millis(200)
|
||||||
|
#define SCROLL_BUTTON_LOCK_GRACE_TIMEOUT usec_from_millis(500)
|
||||||
|
|
||||||
enum evdev_device_udev_tags {
|
enum evdev_device_udev_tags {
|
||||||
EVDEV_UDEV_TAG_NONE = 0,
|
EVDEV_UDEV_TAG_NONE = 0,
|
||||||
|
|
@ -228,6 +229,15 @@ evdev_button_scroll_button(struct evdev_device *device, usec_t time, int is_pres
|
||||||
break; /* handle event */
|
break; /* handle event */
|
||||||
case BUTTONSCROLL_LOCK_FIRSTDOWN:
|
case BUTTONSCROLL_LOCK_FIRSTDOWN:
|
||||||
assert(!is_press);
|
assert(!is_press);
|
||||||
|
if (device->scroll.button_scroll_state == BUTTONSCROLL_SCROLLING &&
|
||||||
|
usec_cmp(usec_delta(time, device->scroll.button_down_time),
|
||||||
|
SCROLL_BUTTON_LOCK_GRACE_TIMEOUT) >= 0) {
|
||||||
|
/* held + scrolled past grace period: temporary scroll,
|
||||||
|
* no lock engaged */
|
||||||
|
device->scroll.lock_state = BUTTONSCROLL_LOCK_IDLE;
|
||||||
|
evdev_log_debug(device, "scroll lock: temp scroll done\n");
|
||||||
|
break; /* pass release through */
|
||||||
|
}
|
||||||
device->scroll.lock_state = BUTTONSCROLL_LOCK_FIRSTUP;
|
device->scroll.lock_state = BUTTONSCROLL_LOCK_FIRSTUP;
|
||||||
evdev_log_debug(device, "scroll lock: first up\n");
|
evdev_log_debug(device, "scroll lock: first up\n");
|
||||||
return; /* filter release event */
|
return; /* filter release event */
|
||||||
|
|
@ -489,6 +499,7 @@ static void
|
||||||
evdev_tag_trackpoint(struct evdev_device *device, struct udev_device *udev_device)
|
evdev_tag_trackpoint(struct evdev_device *device, struct udev_device *udev_device)
|
||||||
{
|
{
|
||||||
char *prop;
|
char *prop;
|
||||||
|
const char *udev_prop;
|
||||||
|
|
||||||
if (!libevdev_has_property(device->evdev, INPUT_PROP_POINTING_STICK) &&
|
if (!libevdev_has_property(device->evdev, INPUT_PROP_POINTING_STICK) &&
|
||||||
!parse_udev_flag(device, udev_device, "ID_INPUT_POINTINGSTICK"))
|
!parse_udev_flag(device, udev_device, "ID_INPUT_POINTINGSTICK"))
|
||||||
|
|
@ -496,10 +507,22 @@ evdev_tag_trackpoint(struct evdev_device *device, struct udev_device *udev_devic
|
||||||
|
|
||||||
device->tags |= EVDEV_TAG_TRACKPOINT;
|
device->tags |= EVDEV_TAG_TRACKPOINT;
|
||||||
|
|
||||||
|
udev_prop = udev_device_get_property_value(udev_device, "ID_INTEGRATION");
|
||||||
|
if (udev_prop) {
|
||||||
|
if (streq(udev_prop, "internal")) {
|
||||||
|
/* noop, this is the default anyway */
|
||||||
|
} else if (streq(udev_prop, "external"))
|
||||||
|
device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
|
||||||
|
else
|
||||||
|
evdev_log_info(device,
|
||||||
|
"tagged with unknown value %s\n",
|
||||||
|
udev_prop);
|
||||||
|
}
|
||||||
|
|
||||||
_unref_(quirks) *q = libinput_device_get_quirks(&device->base);
|
_unref_(quirks) *q = libinput_device_get_quirks(&device->base);
|
||||||
if (q && quirks_get_string(q, QUIRK_ATTR_TRACKPOINT_INTEGRATION, &prop)) {
|
if (q && quirks_get_string(q, QUIRK_ATTR_TRACKPOINT_INTEGRATION, &prop)) {
|
||||||
if (streq(prop, "internal")) {
|
if (streq(prop, "internal")) {
|
||||||
/* noop, this is the default anyway */
|
device->tags &= ~EVDEV_TAG_EXTERNAL_MOUSE;
|
||||||
} else if (streq(prop, "external")) {
|
} else if (streq(prop, "external")) {
|
||||||
device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
|
device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
|
||||||
evdev_log_info(device, "is an external pointing stick\n");
|
evdev_log_info(device, "is an external pointing stick\n");
|
||||||
|
|
@ -527,6 +550,7 @@ static void
|
||||||
evdev_tag_keyboard(struct evdev_device *device, struct udev_device *udev_device)
|
evdev_tag_keyboard(struct evdev_device *device, struct udev_device *udev_device)
|
||||||
{
|
{
|
||||||
char *prop;
|
char *prop;
|
||||||
|
const char *udev_prop;
|
||||||
int code;
|
int code;
|
||||||
|
|
||||||
if (!libevdev_has_event_type(device->evdev, EV_KEY))
|
if (!libevdev_has_event_type(device->evdev, EV_KEY))
|
||||||
|
|
@ -537,6 +561,18 @@ evdev_tag_keyboard(struct evdev_device *device, struct udev_device *udev_device)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
udev_prop = udev_device_get_property_value(udev_device, "ID_INTEGRATION");
|
||||||
|
if (udev_prop) {
|
||||||
|
if (streq(udev_prop, "internal"))
|
||||||
|
evdev_tag_keyboard_internal(device);
|
||||||
|
else if (streq(udev_prop, "external"))
|
||||||
|
evdev_tag_keyboard_external(device);
|
||||||
|
else
|
||||||
|
evdev_log_info(device,
|
||||||
|
"tagged with unknown value %s\n",
|
||||||
|
udev_prop);
|
||||||
|
}
|
||||||
|
|
||||||
_unref_(quirks) *q = libinput_device_get_quirks(&device->base);
|
_unref_(quirks) *q = libinput_device_get_quirks(&device->base);
|
||||||
if (q && quirks_get_string(q, QUIRK_ATTR_KEYBOARD_INTEGRATION, &prop)) {
|
if (q && quirks_get_string(q, QUIRK_ATTR_KEYBOARD_INTEGRATION, &prop)) {
|
||||||
if (streq(prop, "internal")) {
|
if (streq(prop, "internal")) {
|
||||||
|
|
|
||||||
|
|
@ -5206,7 +5206,7 @@ libinput_tablet_tool_config_eraser_button_get_default_mode(
|
||||||
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
||||||
return LIBINPUT_CONFIG_ERASER_BUTTON_DEFAULT;
|
return LIBINPUT_CONFIG_ERASER_BUTTON_DEFAULT;
|
||||||
|
|
||||||
return tool->config.eraser_button.get_mode(tool);
|
return tool->config.eraser_button.get_default_mode(tool);
|
||||||
}
|
}
|
||||||
|
|
||||||
LIBINPUT_EXPORT enum libinput_config_status
|
LIBINPUT_EXPORT enum libinput_config_status
|
||||||
|
|
@ -5216,16 +5216,9 @@ libinput_tablet_tool_config_eraser_button_set_button(struct libinput_tablet_tool
|
||||||
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
||||||
return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
|
return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
|
||||||
|
|
||||||
switch (button) {
|
evdev_usage_t usage = evdev_usage_from_code(EV_KEY, button);
|
||||||
case BTN_STYLUS:
|
if (!evdev_usage_is_button(usage))
|
||||||
case BTN_STYLUS2:
|
return LIBINPUT_CONFIG_STATUS_INVALID;
|
||||||
case BTN_STYLUS3:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (!libinput_tablet_tool_has_button(tool, button))
|
|
||||||
return LIBINPUT_CONFIG_STATUS_INVALID;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return tool->config.eraser_button.set_button(tool, button);
|
return tool->config.eraser_button.set_button(tool, button);
|
||||||
}
|
}
|
||||||
|
|
@ -5246,7 +5239,7 @@ libinput_tablet_tool_config_eraser_button_get_default_button(
|
||||||
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
if (!libinput_tablet_tool_config_eraser_button_get_modes(tool))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return tool->config.eraser_button.get_button(tool);
|
return tool->config.eraser_button.get_default_button(tool);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBWACOM
|
#ifdef HAVE_LIBWACOM
|
||||||
|
|
|
||||||
|
|
@ -6624,7 +6624,9 @@ enum libinput_config_scroll_button_lock_state {
|
||||||
* If the state is
|
* If the state is
|
||||||
* @ref LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_ENABLED, the button is considered
|
* @ref LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_ENABLED, the button is considered
|
||||||
* logically down after the first press and release sequence, and logically
|
* logically down after the first press and release sequence, and logically
|
||||||
* up after the second press and release sequence.
|
* up after the second press and release sequence. If the button is held
|
||||||
|
* and used to scroll for longer than a short grace period, releasing the
|
||||||
|
* button does not engage the lock.
|
||||||
*
|
*
|
||||||
* @param device The device to configure
|
* @param device The device to configure
|
||||||
* @param state The state to set the scroll button lock to
|
* @param state The state to set the scroll button lock to
|
||||||
|
|
@ -7371,14 +7373,9 @@ libinput_tablet_tool_config_eraser_button_get_default_mode(
|
||||||
* the eraser mode to @ref LIBINPUT_CONFIG_ERASER_BUTTON_BUTTON via
|
* the eraser mode to @ref LIBINPUT_CONFIG_ERASER_BUTTON_BUTTON via
|
||||||
* libinput_tablet_tool_config_eraser_button_set_mode().
|
* libinput_tablet_tool_config_eraser_button_set_mode().
|
||||||
*
|
*
|
||||||
* The buttons BTN_STYLUS, BTN_STYLUS2 and BTN_STYLUS2 are always
|
|
||||||
* allowed, even if libinput_tablet_tool_has_button() returns zero
|
|
||||||
* for the button. Otherwise, the button must be one that
|
|
||||||
* libinput_tablet_tool_has_button() returns a nonzero value for.
|
|
||||||
*
|
|
||||||
* @param tool The libinput tool
|
* @param tool The libinput tool
|
||||||
* @param button The button, usually one of BTN_STYLUS, BTN_STYLUS2 or
|
* @param button The button code. Must be a valid button (e.g. BTN_STYLUS)
|
||||||
* BTN_STYLUS3
|
* excluding fake buttons (e.g. BTN_TOOL_*) and keys (KEY_*)
|
||||||
*
|
*
|
||||||
* @return A config status code
|
* @return A config status code
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
/* This has the hallmarks of a library to make it re-usable from the tests
|
/* This has the hallmarks of a library to make it re-usable from the tests
|
||||||
* and from the list-quirks tool. It doesn't have all of the features from a
|
* and from the quirks list tool. It doesn't have all of the features from a
|
||||||
* library you'd expect though
|
* library you'd expect though
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ DECLARE_NEWTYPE(usec, uint64_t);
|
||||||
static inline usec_t
|
static inline usec_t
|
||||||
usec_from_millis(uint32_t millis)
|
usec_from_millis(uint32_t millis)
|
||||||
{
|
{
|
||||||
return usec_from_uint64_t(millis * 1000);
|
return usec_from_uint64_t(millis * 1000ULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline usec_t
|
static inline usec_t
|
||||||
|
|
@ -101,13 +101,13 @@ us2ms_f(usec_t us)
|
||||||
static inline usec_t
|
static inline usec_t
|
||||||
usec_from_timeval(const struct timeval *tv)
|
usec_from_timeval(const struct timeval *tv)
|
||||||
{
|
{
|
||||||
return usec_from_uint64_t(tv->tv_sec * 1000000 + tv->tv_usec);
|
return usec_from_uint64_t(tv->tv_sec * 1000000ULL + tv->tv_usec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline usec_t
|
static inline usec_t
|
||||||
usec_from_timespec(const struct timespec *tp)
|
usec_from_timespec(const struct timespec *tp)
|
||||||
{
|
{
|
||||||
return usec_from_uint64_t(tp->tv_sec * 1000000 + tp->tv_nsec / 1000);
|
return usec_from_uint64_t(tp->tv_sec * 1000000ULL + tp->tv_nsec / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline usec_t
|
static inline usec_t
|
||||||
|
|
|
||||||
|
|
@ -75,5 +75,6 @@ TEST_DEVICE(LITEST_ABSINFO_OVERRIDE,
|
||||||
{ "EVDEV_ABS_01", "2:2000:200:20" },
|
{ "EVDEV_ABS_01", "2:2000:200:20" },
|
||||||
{ "EVDEV_ABS_35", "3:3000:300:30" },
|
{ "EVDEV_ABS_35", "3:3000:300:30" },
|
||||||
{ "EVDEV_ABS_36", "4:4000:400:40" },
|
{ "EVDEV_ABS_36", "4:4000:400:40" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -197,4 +197,8 @@ TEST_DEVICE(LITEST_ACER_HAWAII_KEYBOARD,
|
||||||
.name = "Chicony ACER Hawaii Keyboard",
|
.name = "Chicony ACER Hawaii Keyboard",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -93,4 +93,8 @@ TEST_DEVICE(LITEST_ACER_HAWAII_TOUCHPAD,
|
||||||
.name = "Chicony ACER Hawaii Keyboard Touchpad",
|
.name = "Chicony ACER Hawaii Keyboard Touchpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -157,4 +157,8 @@ TEST_DEVICE(LITEST_AIPTEK,
|
||||||
.name = "Aiptek",
|
.name = "Aiptek",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -173,4 +173,8 @@ TEST_DEVICE(LITEST_ALPS_3FG,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.create = alps_create, )
|
.create = alps_create,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -120,4 +120,8 @@ TEST_DEVICE(LITEST_ALPS_DUALPOINT,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -113,4 +113,8 @@ TEST_DEVICE(LITEST_ALPS_SEMI_MT,
|
||||||
.name = "AlpsPS/2 ALPS GlidePoint",
|
.name = "AlpsPS/2 ALPS GlidePoint",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -218,4 +218,8 @@ TEST_DEVICE(LITEST_ANKER_MOUSE_KBD,
|
||||||
.name = "USB Laser Game Mouse",
|
.name = "USB Laser Game Mouse",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -100,4 +100,8 @@ TEST_DEVICE(LITEST_APPLETOUCH,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -226,4 +226,8 @@ TEST_DEVICE(LITEST_APPLE_KEYBOARD,
|
||||||
.name = "Apple Inc. Apple Internal Keyboard / Trackpad",
|
.name = "Apple Inc. Apple Internal Keyboard / Trackpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -100,5 +100,6 @@ TEST_DEVICE(LITEST_MAGICMOUSE,
|
||||||
* re-writing those, so let's assume the default */
|
* re-writing those, so let's assume the default */
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "MOUSE_DPI", "1000" },
|
{ "MOUSE_DPI", "1000" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -323,4 +323,8 @@ TEST_DEVICE(LITEST_MOUSE_GLADIUS,
|
||||||
.name = "ASUS ROG GLADIUS",
|
.name = "ASUS ROG GLADIUS",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -132,4 +132,8 @@ TEST_DEVICE(LITEST_ATMEL_HOVER,
|
||||||
.name = "Atmel maXTouch Touchpad",
|
.name = "Atmel maXTouch Touchpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -127,4 +127,8 @@ TEST_DEVICE(LITEST_BCM5974,
|
||||||
.name = "bcm5974",
|
.name = "bcm5974",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -85,5 +85,6 @@ TEST_DEVICE(LITEST_CALIBRATED_TOUCHSCREEN,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "LIBINPUT_CALIBRATION_MATRIX", "1.2 3.4 5.6 7.8 9.10 11.12" },
|
{ "LIBINPUT_CALIBRATION_MATRIX", "1.2 3.4 5.6 7.8 9.10 11.12" },
|
||||||
{ "WL_OUTPUT", "myOutput" },
|
{ "WL_OUTPUT", "myOutput" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -58,4 +58,8 @@ TEST_DEVICE(LITEST_CYBORG_RAT,
|
||||||
.name = "Saitek Cyborg R.A.T.5 Mouse",
|
.name = "Saitek Cyborg R.A.T.5 Mouse",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -90,5 +90,6 @@ TEST_DEVICE(LITEST_DELL_CANVAS_TOTEM_TOUCH,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -127,5 +127,6 @@ TEST_DEVICE(LITEST_DELL_CANVAS_TOTEM,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -146,4 +146,8 @@ TEST_DEVICE(LITEST_ELAN_TABLET,
|
||||||
.name = "ELAN2514:00 04F3:23B9",
|
.name = "ELAN2514:00 04F3:23B9",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -109,4 +109,8 @@ TEST_DEVICE(LITEST_ELANTECH_TOUCHPAD,
|
||||||
.name = "ETPS/2 Elantech Touchpad",
|
.name = "ETPS/2 Elantech Touchpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -53,4 +53,8 @@ TEST_DEVICE(LITEST_MOUSE_FORMAT_STRING,
|
||||||
.name = "Evil %s %d %x Mouse %p %",
|
.name = "Evil %s %d %x Mouse %p %",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -123,4 +123,8 @@ TEST_DEVICE(LITEST_GENERIC_PRESSUREPAD,
|
||||||
.name = "Some Generic Pressurepad Touchpad",
|
.name = "Some Generic Pressurepad Touchpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -76,4 +76,8 @@ TEST_DEVICE(LITEST_GENERIC_SINGLETOUCH,
|
||||||
.name = "generic_singletouch",
|
.name = "generic_singletouch",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -198,4 +198,8 @@ TEST_DEVICE(LITEST_GENERIC_USBCOMBO_KEYBOARD,
|
||||||
.name = "Generic USB KeyTouch Combo",
|
.name = "Generic USB KeyTouch Combo",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ TEST_DEVICE(LITEST_GENERIC_USBCOMBO_TOUCHPAD,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
},
|
},
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file, )
|
||||||
|
|
|
||||||
|
|
@ -61,5 +61,6 @@ TEST_DEVICE(LITEST_GPIO_KEYS,
|
||||||
.quirk_file = quirk_file,
|
.quirk_file = quirk_file,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -60,5 +60,6 @@ TEST_DEVICE(LITEST_HP_WMI_HOTKEYS,
|
||||||
|
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -108,4 +108,8 @@ TEST_DEVICE(LITEST_HUION_TABLET,
|
||||||
.name = "HUION PenTablet Pen",
|
.name = "HUION PenTablet Pen",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -78,5 +78,6 @@ TEST_DEVICE(LITEST_HUION_Q620M_DIAL,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -54,5 +54,6 @@ TEST_DEVICE(LITEST_IGNORED_MOUSE,
|
||||||
.events = events,
|
.events = events,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "LIBINPUT_IGNORE_DEVICE", "1" },
|
{ "LIBINPUT_IGNORE_DEVICE", "1" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,11 @@ TEST_DEVICE(LITEST_KEYBOARD_ALL_CODES,
|
||||||
.name = NAME,
|
.name = NAME,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = NULL,
|
.events = NULL,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
all_codes_create(struct litest_device *d)
|
all_codes_create(struct litest_device *d)
|
||||||
|
|
|
||||||
|
|
@ -250,4 +250,8 @@ TEST_DEVICE(LITEST_KEYBOARD_QUIRKED,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
},
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file, )
|
||||||
|
|
|
||||||
|
|
@ -343,4 +343,8 @@ TEST_DEVICE(LITEST_KEYBOARD_BLACKWIDOW,
|
||||||
.name = "Razer Razer BlackWidow 2013",
|
.name = "Razer Razer BlackWidow 2013",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -215,4 +215,8 @@ TEST_DEVICE(LITEST_KEYBOARD_BLADE_STEALTH_VIDEOSWITCH,
|
||||||
|
|
||||||
.name = "Razer Razer Blade Stealth",
|
.name = "Razer Razer Blade Stealth",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -341,4 +341,8 @@ TEST_DEVICE(LITEST_KEYBOARD_BLADE_STEALTH,
|
||||||
.name = "Razer Razer Blade Stealth",
|
.name = "Razer Razer Blade Stealth",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -202,4 +202,8 @@ TEST_DEVICE(LITEST_KEYBOARD,
|
||||||
.name = "AT Translated Set 2 keyboard",
|
.name = "AT Translated Set 2 keyboard",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -52,5 +52,6 @@ TEST_DEVICE(LITEST_KEYPAD_SLIDE_SWITCH,
|
||||||
|
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -57,4 +57,8 @@ TEST_DEVICE(LITEST_LENOVO_SCROLLPOINT,
|
||||||
.name = "HID 04b3:3109",
|
.name = "HID 04b3:3109",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -57,5 +57,6 @@ TEST_DEVICE(LITEST_LID_SWITCH_SURFACE3,
|
||||||
.quirk_file = quirk_file,
|
.quirk_file = quirk_file,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -56,5 +56,6 @@ TEST_DEVICE(LITEST_LID_SWITCH,
|
||||||
.quirk_file = quirk_file,
|
.quirk_file = quirk_file,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -88,4 +88,8 @@ TEST_DEVICE(LITEST_KEYBOARD_LOGITECH_MEDIA_KEYBOARD_ELITE,
|
||||||
.name = "Logitech Logitech USB Keyboard Consumer Control",
|
.name = "Logitech Logitech USB Keyboard Consumer Control",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_LOGITECH_TRACKBALL,
|
||||||
.name = "Logitech USB Trackball",
|
.name = "Logitech USB Trackball",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -120,6 +120,6 @@ TEST_DEVICE(LITEST_MAGIC_TRACKPAD,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
|
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -57,5 +57,6 @@ TEST_DEVICE(LITEST_MOUSE_LOW_DPI,
|
||||||
.events = events,
|
.events = events,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "MOUSE_DPI", "400@125" },
|
{ "MOUSE_DPI", "400@125" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -55,4 +55,8 @@ TEST_DEVICE(LITEST_MOUSE_PS2,
|
||||||
.name = "ImExPS/2 Generic Explorer Mouse",
|
.name = "ImExPS/2 Generic Explorer Mouse",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -195,4 +195,8 @@ TEST_DEVICE(LITEST_MOUSE_ROCCAT,
|
||||||
.name = "ROCCAT ROCCAT Kone XTD",
|
.name = "ROCCAT ROCCAT Kone XTD",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_MOUSE_VIRTUAL,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -56,5 +56,6 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_CLICK_ANGLE,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "MOUSE_WHEEL_CLICK_ANGLE", "-7" },
|
{ "MOUSE_WHEEL_CLICK_ANGLE", "-7" },
|
||||||
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -57,5 +57,6 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_CLICK_COUNT,
|
||||||
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
||||||
{ "MOUSE_WHEEL_CLICK_COUNT", "-14" },
|
{ "MOUSE_WHEEL_CLICK_COUNT", "-14" },
|
||||||
{ "MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL", "27" },
|
{ "MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL", "27" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -60,4 +60,8 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_HIRES_DISABLED,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events,
|
.events = events,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -56,5 +56,6 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_TILT,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "MOUSE_WHEEL_TILT_HORIZONTAL", "1" },
|
{ "MOUSE_WHEEL_TILT_HORIZONTAL", "1" },
|
||||||
{ "MOUSE_WHEEL_TILT_VERTICAL", "1" },
|
{ "MOUSE_WHEEL_TILT_VERTICAL", "1" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_MOUSE,
|
||||||
.name = "Lenovo Optical USB Mouse",
|
.name = "Lenovo Optical USB Mouse",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -56,4 +56,8 @@ TEST_DEVICE(LITEST_MS_NANO_TRANSCEIVER_MOUSE,
|
||||||
.name = "Microsoft Microsoft® Nano Transceiver v2.0",
|
.name = "Microsoft Microsoft® Nano Transceiver v2.0",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -382,4 +382,8 @@ TEST_DEVICE(LITEST_MS_SURFACE_COVER,
|
||||||
.name = "Microsoft Surface Type Cover",
|
.name = "Microsoft Surface Type Cover",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -87,4 +87,8 @@ TEST_DEVICE(LITEST_NEXUS4_TOUCH_SCREEN,
|
||||||
.name = "Nexus 4 touch screen",
|
.name = "Nexus 4 touch screen",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -127,4 +127,8 @@ TEST_DEVICE(LITEST_PLOOPY_PAVONIS_STYLUS,
|
||||||
.name = "Ploopy Corporation Ploopy Pavonis Trackpad Stylus",
|
.name = "Ploopy Corporation Ploopy Pavonis Trackpad Stylus",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -213,4 +213,8 @@ TEST_DEVICE(LITEST_PROTOCOL_A_SCREEN,
|
||||||
.name = "Protocol A touch screen",
|
.name = "Protocol A touch screen",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -98,4 +98,8 @@ TEST_DEVICE(LITEST_QEMU_TABLET,
|
||||||
.name = "QEMU 0.12.1 QEMU USB Tablet",
|
.name = "QEMU 0.12.1 QEMU USB Tablet",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -94,4 +94,8 @@ TEST_DEVICE(LITEST_SONY_VAIO_KEYS,
|
||||||
.name = "Sony Vaio Keys",
|
.name = "Sony Vaio Keys",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = NULL, )
|
.absinfo = NULL,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -112,4 +112,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_HOVER_SEMI_MT,
|
||||||
.name = "SynPS/2 Synaptics TouchPad",
|
.name = "SynPS/2 Synaptics TouchPad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -96,4 +96,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_I2C,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
},
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file, )
|
||||||
|
|
|
||||||
|
|
@ -99,4 +99,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_PHANTOMCLICKS,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
},
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file, )
|
||||||
|
|
|
||||||
|
|
@ -123,4 +123,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_PRESSUREPAD,
|
||||||
.name = "SYNA2B31:00 06CB:CE37 Touchpad",
|
.name = "SYNA2B31:00 06CB:CE37 Touchpad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -122,4 +122,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_RMI4,
|
||||||
.name = "Synaptics TM3053-004",
|
.name = "Synaptics TM3053-004",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -99,4 +99,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_TOUCHPAD,
|
||||||
.name = "SynPS/2 Synaptics TouchPad",
|
.name = "SynPS/2 Synaptics TouchPad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -115,4 +115,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_TOPBUTTONPAD,
|
||||||
.name = "SynPS/2 Synaptics TouchPad",
|
.name = "SynPS/2 Synaptics TouchPad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -122,4 +122,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_TRACKPOINT_BUTTONS,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -113,4 +113,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_CLICKPAD_X220,
|
||||||
.name = "SynPS/2 Synaptics TouchPad",
|
.name = "SynPS/2 Synaptics TouchPad",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -79,5 +79,6 @@ TEST_DEVICE(LITEST_TABLET_DOUBLEDIAL_PAD,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -61,5 +61,6 @@ TEST_DEVICE(LITEST_TABLET_MODE_UNRELIABLE,
|
||||||
.quirk_file = quirk_file,
|
.quirk_file = quirk_file,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -76,5 +76,6 @@ TEST_DEVICE(LITEST_TABLET_REL_DIAL_PAD,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -82,5 +82,6 @@ TEST_DEVICE(LITEST_THINKPAD_EXTRABUTTONS,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.udev_properties = {
|
.udev_properties = {
|
||||||
{ "ID_INPUT_SWITCH", "1" },
|
{ "ID_INPUT_SWITCH", "1" },
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
{ NULL },
|
{ NULL },
|
||||||
}, )
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -93,4 +93,8 @@ TEST_DEVICE(LITEST_GENERIC_MULTITOUCH_SCREEN,
|
||||||
.name = "generic-mt",
|
.name = "generic-mt",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -122,4 +122,8 @@ TEST_DEVICE(LITEST_TOUCHPAD_PALMPRESSURE_ZERO,
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo,
|
.absinfo = absinfo,
|
||||||
.quirk_file = quirk_file, )
|
.quirk_file = quirk_file,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -84,4 +84,8 @@ TEST_DEVICE(LITEST_MULTITOUCH_FUZZ_SCREEN,
|
||||||
.name = "touchscreen with fuzz",
|
.name = "touchscreen with fuzz",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -84,4 +84,8 @@ TEST_DEVICE(LITEST_TOUCHSCREEN_INVALID_RANGE,
|
||||||
.name = "touchscreen-invalid-range",
|
.name = "touchscreen-invalid-range",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -87,4 +87,8 @@ TEST_DEVICE(LITEST_TOUCHSCREEN_MT_TOOL_TYPE,
|
||||||
.name = "touchscreen-mt-tool-type",
|
.name = "touchscreen-mt-tool-type",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_TRACKPOINT,
|
||||||
.name = "TPPS/2 IBM TrackPoint",
|
.name = "TPPS/2 IBM TrackPoint",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.absinfo = NULL,
|
.absinfo = NULL,
|
||||||
.events = events, )
|
.events = events,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "internal" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -106,4 +106,8 @@ TEST_DEVICE(LITEST_UCLOGIC_TABLET,
|
||||||
.name = "uclogic PenTablet Pen",
|
.name = "uclogic PenTablet Pen",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -113,4 +113,8 @@ TEST_DEVICE(LITEST_VMWARE_VIRTMOUSE,
|
||||||
.name = "VMware VMware Virtual USB Mouse",
|
.name = "VMware VMware Virtual USB Mouse",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
|
|
@ -113,4 +113,8 @@ TEST_DEVICE(LITEST_WACOM_BAMBOO_16FG_PEN,
|
||||||
.name = "Wacom Bamboo 16FG 4x5 Pen",
|
.name = "Wacom Bamboo 16FG 4x5 Pen",
|
||||||
.id = &input_id,
|
.id = &input_id,
|
||||||
.events = events,
|
.events = events,
|
||||||
.absinfo = absinfo, )
|
.absinfo = absinfo,
|
||||||
|
.udev_properties = {
|
||||||
|
{ "ID_INTEGRATION", "external" },
|
||||||
|
{ NULL },
|
||||||
|
}, )
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue