mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-03-21 22:40:42 +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]' \
|
||||
'--show-keycodes[Make all keycodes visible]' \
|
||||
'--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/' \
|
||||
'--udev=[Listen for notifications on the given seat]:seat:__all_seats' \
|
||||
'--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
|
||||
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:
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@
|
|||
Switches
|
||||
==============================================================================
|
||||
|
||||
libinput supports the lid and tablet-mode switches. Unlike button events
|
||||
that come in press and release pairs, switches are usually toggled once and
|
||||
left at the setting for an extended period of time.
|
||||
libinput supports the lid, tablet-mode, and keypad slide switches. Unlike
|
||||
button events that come in press and release pairs, switches are usually
|
||||
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
|
||||
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
|
||||
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
|
||||
works for your device: ::
|
||||
|
||||
$ sudo libinput list-quirks /dev/input/event10
|
||||
$ sudo libinput quirks list /dev/input/event10
|
||||
AttrPressureRange=10:8
|
||||
|
||||
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
|
||||
works for your device: ::
|
||||
|
||||
$ sudo libinput list-quirks /dev/input/event10
|
||||
$ sudo libinput quirks list /dev/input/event10
|
||||
AttrTouchSizeRange=10:8
|
||||
|
||||
Replace the event node with the one from your device. If the
|
||||
|
|
|
|||
|
|
@ -131,7 +131,7 @@ Handled device types
|
|||
- Mice
|
||||
- Keyboards
|
||||
- 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
|
||||
- :ref:`Trackpoints`
|
||||
|
||||
|
|
|
|||
|
|
@ -766,7 +766,7 @@ executable('ptraccel-debug',
|
|||
if is_debug_build
|
||||
config_tool_option_test = configuration_data()
|
||||
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('TOOL_PATH', libinput_tool.full_path())
|
||||
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.
|
||||
# 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)]
|
||||
MatchBus=i2c
|
||||
MatchVendor=0x27C6
|
||||
|
|
@ -9,6 +18,33 @@ MatchProduct=0x01E8
|
|||
MatchUdevType=touchpad
|
||||
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:00 27C6:0F95 Touchpad
|
||||
[Goodix Haptic Touchpad (27C6:0F95)]
|
||||
|
|
|
|||
|
|
@ -11,15 +11,10 @@ AttrLidSwitchReliability=write_open
|
|||
# - Surface Laptop 3: Microsoft Surface 045E:09AE Keyboard
|
||||
# - Surface Book 2: Microsoft Surface Keyboard
|
||||
[Microsoft Surface Keyboard]
|
||||
MatchName=*Microsoft Surface *Keyboard*
|
||||
MatchName=Microsoft Surface *Keyboard
|
||||
MatchDMIModalias=dmi:*:svnMicrosoftCorporation:*
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
[Microsoft Surface Cover]
|
||||
MatchName=*Microsoft Surface *Cover*
|
||||
MatchDMIModalias=dmi:*:svnMicrosoftCorporation:*
|
||||
AttrKeyboardIntegration=internal
|
||||
AttrEventCode=-BTN_0;
|
||||
AttrKeyboardIntegration=internal
|
||||
|
||||
[Microsoft Surface Laptop Studio Touchpad]
|
||||
MatchVendor=0x045E
|
||||
|
|
|
|||
|
|
@ -88,6 +88,7 @@ AttrThumbSizeThreshold=700
|
|||
MatchBus=usb
|
||||
MatchVendor=0x05AC
|
||||
MatchProduct=0x0324
|
||||
AttrSizeHint=162x115
|
||||
AttrTouchSizeRange=20:10
|
||||
AttrPressureRange=3:0
|
||||
AttrPalmSizeThreshold=900
|
||||
|
|
|
|||
|
|
@ -24,28 +24,27 @@ MatchName=*Intel Virtual Button*
|
|||
MatchDMIModalias=dmi:*:svnHP:pnHPElitex21013G3:*
|
||||
ModelTabletModeSwitchUnreliable=1
|
||||
|
||||
# The HP OmniBook Ultra Flip Laptop 14-fh0xxx's custom Intel ISH firmware
|
||||
# filters out events from its builtin keyboard and touchpad when the hinge is
|
||||
# opened little more than 180 degrees but toggles tablet-mode when it's opened
|
||||
# little less than 180 degrees.
|
||||
# Do not suspend the keyboard and touchpad to let use the device in flat
|
||||
# position and also give consistency with some keyboard keys controlled by the
|
||||
# Video Bus device (brightness down/up), the HP WMI hotkeys device (mic mute and
|
||||
# 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]
|
||||
# The HP OmniBook Ultra Flip 14 toggles tablet mode at a little less than 180
|
||||
# degrees and hardware switches off inputs at a little more than 180 degrees.
|
||||
# We don't suspend ourselves to allow using them in flat position. It is
|
||||
# possible that HP fixes this in the future (i.e. so tablet mode toggles
|
||||
# after 180 degrees) so check before removing these rules.
|
||||
# This rule is for the keyboard and...
|
||||
[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Keyboard]
|
||||
MatchBus=ps2
|
||||
MatchUdevType=keyboard
|
||||
MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:*
|
||||
MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:*
|
||||
ModelTabletModeNoSuspend=1
|
||||
|
||||
# ...this one is for the touchpad.
|
||||
[HP OmniBook Ultra Flip Laptop 14-fh0xxx Touchpad]
|
||||
# ...this rule is for the touchpad.
|
||||
[HP OmniBook Ultra Flip Laptop 14-fh0xxx and 14t-fh000 Touchpad]
|
||||
MatchBus=i2c
|
||||
MatchUdevType=touchpad
|
||||
MatchDMIModalias=dmi:*:svnHP:pnHPOmniBookUltraFlipLaptop14-fh0xxx:*
|
||||
MatchDMIModalias=dmi:*:svnHP:*:rn8CDE:*
|
||||
ModelTabletModeNoSuspend=1
|
||||
AttrPressureRange=15:5
|
||||
AttrThumbPressureThreshold=80
|
||||
AttrPalmPressureThreshold=125
|
||||
|
||||
[HP Pavilion dm4]
|
||||
MatchName=*SynPS/2 Synaptics TouchPad
|
||||
|
|
|
|||
|
|
@ -82,10 +82,10 @@ files will not be used.
|
|||
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
|
||||
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_TOUCH:
|
||||
return false;
|
||||
case BTN_STYLUS:
|
||||
case BTN_STYLUS2:
|
||||
case BTN_STYLUS3:
|
||||
case EVDEV_BTN_STYLUS:
|
||||
case EVDEV_BTN_STYLUS2:
|
||||
case EVDEV_BTN_STYLUS3:
|
||||
return true;
|
||||
case EVDEV_BTN_MISC ... EVDEV_BTN_DIGI - 1:
|
||||
case EVDEV_BTN_WHEEL ... EVDEV_BTN_GEAR_UP:
|
||||
|
|
@ -550,10 +550,12 @@ evdev_frame_append(struct evdev_frame *frame,
|
|||
size_t nevents)
|
||||
{
|
||||
assert(nevents > 0);
|
||||
int syn_report_value = 0;
|
||||
|
||||
for (size_t i = 0; i < nevents; i++) {
|
||||
if (evdev_usage_eq(events[i].usage, EVDEV_SYN_REPORT)) {
|
||||
nevents = i;
|
||||
syn_report_value = events[i].value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -568,14 +570,24 @@ evdev_frame_append(struct evdev_frame *frame,
|
|||
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;
|
||||
}
|
||||
|
||||
static inline int
|
||||
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;
|
||||
}
|
||||
|
||||
if (frame->count >= frame->max_size)
|
||||
return -ENOMEM;
|
||||
|
|
|
|||
|
|
@ -2678,6 +2678,22 @@ evdev_tag_touchpad(struct evdev_device *device, struct udev_device *udev_device)
|
|||
int bustype, vendor;
|
||||
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,
|
||||
"ID_INPUT_TOUCHPAD_INTEGRATION");
|
||||
if (prop) {
|
||||
|
|
|
|||
|
|
@ -1311,18 +1311,6 @@ eraser_button_get_default_mode(struct libinput_tablet_tool *tool)
|
|||
static enum libinput_config_status
|
||||
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;
|
||||
|
||||
eraser_button_toggle(tool);
|
||||
|
|
|
|||
38
src/evdev.c
38
src/evdev.c
|
|
@ -54,6 +54,7 @@
|
|||
|
||||
#define DEFAULT_WHEEL_CLICK_ANGLE 15
|
||||
#define DEFAULT_BUTTON_SCROLL_TIMEOUT usec_from_millis(200)
|
||||
#define SCROLL_BUTTON_LOCK_GRACE_TIMEOUT usec_from_millis(500)
|
||||
|
||||
enum evdev_device_udev_tags {
|
||||
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 */
|
||||
case BUTTONSCROLL_LOCK_FIRSTDOWN:
|
||||
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;
|
||||
evdev_log_debug(device, "scroll lock: first up\n");
|
||||
return; /* filter release event */
|
||||
|
|
@ -489,6 +499,7 @@ static void
|
|||
evdev_tag_trackpoint(struct evdev_device *device, struct udev_device *udev_device)
|
||||
{
|
||||
char *prop;
|
||||
const char *udev_prop;
|
||||
|
||||
if (!libevdev_has_property(device->evdev, INPUT_PROP_POINTING_STICK) &&
|
||||
!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;
|
||||
|
||||
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);
|
||||
if (q && quirks_get_string(q, QUIRK_ATTR_TRACKPOINT_INTEGRATION, &prop)) {
|
||||
if (streq(prop, "internal")) {
|
||||
/* noop, this is the default anyway */
|
||||
device->tags &= ~EVDEV_TAG_EXTERNAL_MOUSE;
|
||||
} else if (streq(prop, "external")) {
|
||||
device->tags |= EVDEV_TAG_EXTERNAL_MOUSE;
|
||||
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)
|
||||
{
|
||||
char *prop;
|
||||
const char *udev_prop;
|
||||
int code;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
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);
|
||||
if (q && quirks_get_string(q, QUIRK_ATTR_KEYBOARD_INTEGRATION, &prop)) {
|
||||
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))
|
||||
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
|
||||
|
|
@ -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))
|
||||
return LIBINPUT_CONFIG_STATUS_UNSUPPORTED;
|
||||
|
||||
switch (button) {
|
||||
case BTN_STYLUS:
|
||||
case BTN_STYLUS2:
|
||||
case BTN_STYLUS3:
|
||||
break;
|
||||
default:
|
||||
if (!libinput_tablet_tool_has_button(tool, button))
|
||||
return LIBINPUT_CONFIG_STATUS_INVALID;
|
||||
break;
|
||||
}
|
||||
evdev_usage_t usage = evdev_usage_from_code(EV_KEY, button);
|
||||
if (!evdev_usage_is_button(usage))
|
||||
return LIBINPUT_CONFIG_STATUS_INVALID;
|
||||
|
||||
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))
|
||||
return 0;
|
||||
|
||||
return tool->config.eraser_button.get_button(tool);
|
||||
return tool->config.eraser_button.get_default_button(tool);
|
||||
}
|
||||
|
||||
#ifdef HAVE_LIBWACOM
|
||||
|
|
|
|||
|
|
@ -6624,7 +6624,9 @@ enum libinput_config_scroll_button_lock_state {
|
|||
* If the state is
|
||||
* @ref LIBINPUT_CONFIG_SCROLL_BUTTON_LOCK_ENABLED, the button is considered
|
||||
* 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 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
|
||||
* 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 button The button, usually one of BTN_STYLUS, BTN_STYLUS2 or
|
||||
* BTN_STYLUS3
|
||||
* @param button The button code. Must be a valid button (e.g. BTN_STYLUS)
|
||||
* excluding fake buttons (e.g. BTN_TOOL_*) and keys (KEY_*)
|
||||
*
|
||||
* @return A config status code
|
||||
*
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include "config.h"
|
||||
|
||||
/* 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
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ DECLARE_NEWTYPE(usec, uint64_t);
|
|||
static inline usec_t
|
||||
usec_from_millis(uint32_t millis)
|
||||
{
|
||||
return usec_from_uint64_t(millis * 1000);
|
||||
return usec_from_uint64_t(millis * 1000ULL);
|
||||
}
|
||||
|
||||
static inline usec_t
|
||||
|
|
@ -101,13 +101,13 @@ us2ms_f(usec_t us)
|
|||
static inline usec_t
|
||||
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
|
||||
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
|
||||
|
|
|
|||
|
|
@ -75,5 +75,6 @@ TEST_DEVICE(LITEST_ABSINFO_OVERRIDE,
|
|||
{ "EVDEV_ABS_01", "2:2000:200:20" },
|
||||
{ "EVDEV_ABS_35", "3:3000:300:30" },
|
||||
{ "EVDEV_ABS_36", "4:4000:400:40" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -197,4 +197,8 @@ TEST_DEVICE(LITEST_ACER_HAWAII_KEYBOARD,
|
|||
.name = "Chicony ACER Hawaii Keyboard",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -157,4 +157,8 @@ TEST_DEVICE(LITEST_AIPTEK,
|
|||
.name = "Aiptek",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -173,4 +173,8 @@ TEST_DEVICE(LITEST_ALPS_3FG,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.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,
|
||||
.events = events,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.absinfo = absinfo,
|
||||
.events = events, )
|
||||
.events = events,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -100,4 +100,8 @@ TEST_DEVICE(LITEST_APPLETOUCH,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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 */
|
||||
.udev_properties = {
|
||||
{ "MOUSE_DPI", "1000" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -323,4 +323,8 @@ TEST_DEVICE(LITEST_MOUSE_GLADIUS,
|
|||
.name = "ASUS ROG GLADIUS",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -127,4 +127,8 @@ TEST_DEVICE(LITEST_BCM5974,
|
|||
.name = "bcm5974",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -85,5 +85,6 @@ TEST_DEVICE(LITEST_CALIBRATED_TOUCHSCREEN,
|
|||
.udev_properties = {
|
||||
{ "LIBINPUT_CALIBRATION_MATRIX", "1.2 3.4 5.6 7.8 9.10 11.12" },
|
||||
{ "WL_OUTPUT", "myOutput" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -58,4 +58,8 @@ TEST_DEVICE(LITEST_CYBORG_RAT,
|
|||
.name = "Saitek Cyborg R.A.T.5 Mouse",
|
||||
.id = &input_id,
|
||||
.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,
|
||||
.udev_properties = {
|
||||
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -127,5 +127,6 @@ TEST_DEVICE(LITEST_DELL_CANVAS_TOTEM,
|
|||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "LIBINPUT_DEVICE_GROUP", "dell-canvas-totem-group" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -146,4 +146,8 @@ TEST_DEVICE(LITEST_ELAN_TABLET,
|
|||
.name = "ELAN2514:00 04F3:23B9",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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 %",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -76,4 +76,8 @@ TEST_DEVICE(LITEST_GENERIC_SINGLETOUCH,
|
|||
.name = "generic_singletouch",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = NULL, )
|
||||
.absinfo = NULL,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ TEST_DEVICE(LITEST_GENERIC_USBCOMBO_TOUCHPAD,
|
|||
.events = events,
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
},
|
||||
.quirk_file = quirk_file, )
|
||||
|
|
|
|||
|
|
@ -61,5 +61,6 @@ TEST_DEVICE(LITEST_GPIO_KEYS,
|
|||
.quirk_file = quirk_file,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -60,5 +60,6 @@ TEST_DEVICE(LITEST_HP_WMI_HOTKEYS,
|
|||
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -108,4 +108,8 @@ TEST_DEVICE(LITEST_HUION_TABLET,
|
|||
.name = "HUION PenTablet Pen",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -78,5 +78,6 @@ TEST_DEVICE(LITEST_HUION_Q620M_DIAL,
|
|||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -54,5 +54,6 @@ TEST_DEVICE(LITEST_IGNORED_MOUSE,
|
|||
.events = events,
|
||||
.udev_properties = {
|
||||
{ "LIBINPUT_IGNORE_DEVICE", "1" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -45,7 +45,11 @@ TEST_DEVICE(LITEST_KEYBOARD_ALL_CODES,
|
|||
.name = NAME,
|
||||
.id = &input_id,
|
||||
.events = NULL,
|
||||
.absinfo = NULL, )
|
||||
.absinfo = NULL,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
||||
static bool
|
||||
all_codes_create(struct litest_device *d)
|
||||
|
|
|
|||
|
|
@ -250,4 +250,8 @@ TEST_DEVICE(LITEST_KEYBOARD_QUIRKED,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = NULL,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
},
|
||||
.quirk_file = quirk_file, )
|
||||
|
|
|
|||
|
|
@ -343,4 +343,8 @@ TEST_DEVICE(LITEST_KEYBOARD_BLACKWIDOW,
|
|||
.name = "Razer Razer BlackWidow 2013",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = NULL, )
|
||||
.absinfo = NULL,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -52,5 +52,6 @@ TEST_DEVICE(LITEST_KEYPAD_SLIDE_SWITCH,
|
|||
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -57,4 +57,8 @@ TEST_DEVICE(LITEST_LENOVO_SCROLLPOINT,
|
|||
.name = "HID 04b3:3109",
|
||||
.id = &input_id,
|
||||
.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,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -56,5 +56,6 @@ TEST_DEVICE(LITEST_LID_SWITCH,
|
|||
.quirk_file = quirk_file,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -88,4 +88,8 @@ TEST_DEVICE(LITEST_KEYBOARD_LOGITECH_MEDIA_KEYBOARD_ELITE,
|
|||
.name = "Logitech Logitech USB Keyboard Consumer Control",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.absinfo = NULL,
|
||||
.events = events, )
|
||||
.events = events,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -120,6 +120,6 @@ TEST_DEVICE(LITEST_MAGIC_TRACKPAD,
|
|||
.absinfo = absinfo,
|
||||
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_TOUCHPAD_INTEGRATION", "external" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -57,5 +57,6 @@ TEST_DEVICE(LITEST_MOUSE_LOW_DPI,
|
|||
.events = events,
|
||||
.udev_properties = {
|
||||
{ "MOUSE_DPI", "400@125" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -55,4 +55,8 @@ TEST_DEVICE(LITEST_MOUSE_PS2,
|
|||
.name = "ImExPS/2 Generic Explorer Mouse",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.absinfo = absinfo,
|
||||
.events = events, )
|
||||
.events = events,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_MOUSE_VIRTUAL,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.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 = {
|
||||
{ "MOUSE_WHEEL_CLICK_ANGLE", "-7" },
|
||||
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -57,5 +57,6 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_CLICK_COUNT,
|
|||
{ "MOUSE_WHEEL_CLICK_ANGLE_HORIZONTAL", "13" },
|
||||
{ "MOUSE_WHEEL_CLICK_COUNT", "-14" },
|
||||
{ "MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL", "27" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -60,4 +60,8 @@ TEST_DEVICE(LITEST_MOUSE_WHEEL_HIRES_DISABLED,
|
|||
.id = &input_id,
|
||||
.absinfo = NULL,
|
||||
.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 = {
|
||||
{ "MOUSE_WHEEL_TILT_HORIZONTAL", "1" },
|
||||
{ "MOUSE_WHEEL_TILT_VERTICAL", "1" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -52,4 +52,8 @@ TEST_DEVICE(LITEST_MOUSE,
|
|||
.name = "Lenovo Optical USB Mouse",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -96,4 +96,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_I2C,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
},
|
||||
.quirk_file = quirk_file, )
|
||||
|
|
|
|||
|
|
@ -99,4 +99,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_PHANTOMCLICKS,
|
|||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
},
|
||||
.quirk_file = quirk_file, )
|
||||
|
|
|
|||
|
|
@ -123,4 +123,8 @@ TEST_DEVICE(LITEST_SYNAPTICS_PRESSUREPAD,
|
|||
.name = "SYNA2B31:00 06CB:CE37 Touchpad",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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,
|
||||
.events = events,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.events = events,
|
||||
.absinfo = absinfo, )
|
||||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -79,5 +79,6 @@ TEST_DEVICE(LITEST_TABLET_DOUBLEDIAL_PAD,
|
|||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -61,5 +61,6 @@ TEST_DEVICE(LITEST_TABLET_MODE_UNRELIABLE,
|
|||
.quirk_file = quirk_file,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
})
|
||||
|
|
|
|||
|
|
@ -76,5 +76,6 @@ TEST_DEVICE(LITEST_TABLET_REL_DIAL_PAD,
|
|||
.absinfo = absinfo,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_TABLET_PAD", "1" },
|
||||
{ "ID_INTEGRATION", "external" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -82,5 +82,6 @@ TEST_DEVICE(LITEST_THINKPAD_EXTRABUTTONS,
|
|||
.absinfo = NULL,
|
||||
.udev_properties = {
|
||||
{ "ID_INPUT_SWITCH", "1" },
|
||||
{ "ID_INTEGRATION", "internal" },
|
||||
{ NULL },
|
||||
}, )
|
||||
|
|
|
|||
|
|
@ -93,4 +93,8 @@ TEST_DEVICE(LITEST_GENERIC_MULTITOUCH_SCREEN,
|
|||
.name = "generic-mt",
|
||||
.id = &input_id,
|
||||
.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,
|
||||
.events = events,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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",
|
||||
.id = &input_id,
|
||||
.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