mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2026-04-01 11:40:54 +02:00
Compare commits
10 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5c86ba7580 | ||
|
|
c5c6cc13be | ||
|
|
70258657b0 | ||
|
|
596a03a0fa | ||
|
|
71fe2b6ef4 | ||
|
|
fc78cdc4bb | ||
|
|
0fcbb58d97 | ||
|
|
c726f37ebd | ||
|
|
3d4712d10a | ||
|
|
076c7b6c00 |
20 changed files with 233 additions and 743 deletions
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 78 KiB |
|
|
@ -1,5 +1,5 @@
|
|||
project('libinput', 'c', 'cpp',
|
||||
version : '1.10.0',
|
||||
version : '1.10.1',
|
||||
license : 'MIT/Expat',
|
||||
default_options : [ 'c_std=gnu99', 'warning_level=2' ],
|
||||
meson_version : '>= 0.40.0')
|
||||
|
|
@ -234,7 +234,7 @@ pkgconfig.generate(
|
|||
# Restore the SELinux context for the libinput.so.a.b.c on install
|
||||
# meson bug https://github.com/mesonbuild/meson/issues/1967
|
||||
meson.add_install_script('src/libinput-restore-selinux-context.sh',
|
||||
get_option('libdir'),
|
||||
join_paths(get_option('prefix'), get_option('libdir')),
|
||||
lib_libinput.full_path())
|
||||
|
||||
############ documentation ############
|
||||
|
|
@ -496,7 +496,8 @@ configure_file(input : 'tools/libinput.man',
|
|||
install_dir : join_paths(get_option('mandir'), 'man1')
|
||||
)
|
||||
|
||||
meson.add_install_script('tools/install-compat-scripts.sh')
|
||||
meson.add_install_script('tools/install-compat-scripts.sh',
|
||||
join_paths(get_option('prefix'), get_option('bindir')))
|
||||
|
||||
ptraccel_debug_sources = [ 'tools/ptraccel-debug.c' ]
|
||||
executable('ptraccel-debug',
|
||||
|
|
@ -563,6 +564,7 @@ if get_option('tests')
|
|||
'test/litest-device-mouse-low-dpi.c',
|
||||
'test/litest-device-mouse-wheel-click-angle.c',
|
||||
'test/litest-device-mouse-wheel-click-count.c',
|
||||
'test/litest-device-ms-nano-transceiver-mouse.c',
|
||||
'test/litest-device-ms-surface-cover.c',
|
||||
'test/litest-device-protocol-a-touch-screen.c',
|
||||
'test/litest-device-qemu-usb-tablet.c',
|
||||
|
|
|
|||
|
|
@ -83,6 +83,7 @@ debounce_state_to_str(enum debounce_state state)
|
|||
CASE_RETURN_STRING(DEBOUNCE_STATE_MAYBE_SPURIOUS);
|
||||
CASE_RETURN_STRING(DEBOUNCE_STATE_RELEASED);
|
||||
CASE_RETURN_STRING(DEBOUNCE_STATE_PRESS_PENDING);
|
||||
CASE_RETURN_STRING(DEBOUNCE_STATE_DISABLED);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
@ -394,6 +395,31 @@ debounce_press_pending_event(struct fallback_dispatch *fallback, enum debounce_e
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
debounce_disabled_event(struct fallback_dispatch *fallback,
|
||||
enum debounce_event event,
|
||||
uint64_t time)
|
||||
{
|
||||
switch (event) {
|
||||
case DEBOUNCE_EVENT_PRESS:
|
||||
fallback->debounce.button_time = time;
|
||||
debounce_notify_button(fallback,
|
||||
LIBINPUT_BUTTON_STATE_PRESSED);
|
||||
break;
|
||||
case DEBOUNCE_EVENT_RELEASE:
|
||||
fallback->debounce.button_time = time;
|
||||
debounce_notify_button(fallback,
|
||||
LIBINPUT_BUTTON_STATE_RELEASED);
|
||||
break;
|
||||
case DEBOUNCE_EVENT_TIMEOUT_SHORT:
|
||||
case DEBOUNCE_EVENT_TIMEOUT:
|
||||
log_debounce_bug(fallback, event);
|
||||
break;
|
||||
case DEBOUNCE_EVENT_OTHERBUTTON:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
debounce_handle_event(struct fallback_dispatch *fallback,
|
||||
enum debounce_event event,
|
||||
|
|
@ -434,6 +460,9 @@ debounce_handle_event(struct fallback_dispatch *fallback,
|
|||
case DEBOUNCE_STATE_PRESS_PENDING:
|
||||
debounce_press_pending_event(fallback, event, time);
|
||||
break;
|
||||
case DEBOUNCE_STATE_DISABLED:
|
||||
debounce_disabled_event(fallback, event, time);
|
||||
break;
|
||||
}
|
||||
|
||||
evdev_log_debug(fallback->device,
|
||||
|
|
@ -484,7 +513,8 @@ fallback_debounce_handle_state(struct fallback_dispatch *dispatch,
|
|||
for (size_t i = 0; i < nchanged; i++) {
|
||||
bool is_down = hw_is_key_down(dispatch, changed[i]);
|
||||
|
||||
if (flushed) {
|
||||
if (flushed &&
|
||||
dispatch->debounce.state != DEBOUNCE_STATE_DISABLED) {
|
||||
debounce_set_state(dispatch,
|
||||
!is_down ?
|
||||
DEBOUNCE_STATE_IS_DOWN :
|
||||
|
|
@ -538,6 +568,12 @@ fallback_init_debounce(struct fallback_dispatch *dispatch)
|
|||
struct evdev_device *device = dispatch->device;
|
||||
char timer_name[64];
|
||||
|
||||
if (device->model_flags & EVDEV_MODEL_MS_NANO_TRANSCEIVER) {
|
||||
dispatch->debounce.state = DEBOUNCE_STATE_DISABLED;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
dispatch->debounce.state = DEBOUNCE_STATE_IS_UP;
|
||||
|
||||
snprintf(timer_name,
|
||||
|
|
|
|||
|
|
@ -41,6 +41,8 @@ enum debounce_state {
|
|||
DEBOUNCE_STATE_MAYBE_SPURIOUS,
|
||||
DEBOUNCE_STATE_RELEASED,
|
||||
DEBOUNCE_STATE_PRESS_PENDING,
|
||||
|
||||
DEBOUNCE_STATE_DISABLED = 999,
|
||||
};
|
||||
|
||||
struct fallback_dispatch {
|
||||
|
|
|
|||
|
|
@ -1025,6 +1025,7 @@ tp_tap_handle_state(struct tp_dispatch *tp, uint64_t time)
|
|||
|
||||
} else if (t->state == TOUCH_END) {
|
||||
if (t->was_down) {
|
||||
assert(tp->tap.nfingers_down >= 1);
|
||||
tp->tap.nfingers_down--;
|
||||
tp_tap_handle_event(tp, t, TAP_EVENT_RELEASE, time);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1092,14 +1092,16 @@ tp_unhover_pressure(struct tp_dispatch *tp, uint64_t time)
|
|||
* _all_ fingers have enough pressure, even if some of the slotted
|
||||
* ones don't. Anything else gets insane quickly.
|
||||
*/
|
||||
tp_for_each_touch(tp, t) {
|
||||
if (t->state == TOUCH_HOVERING) {
|
||||
/* avoid jumps when landing a finger */
|
||||
tp_motion_history_reset(t);
|
||||
tp_begin_touch(tp, t, time);
|
||||
if (real_fingers_down > 0) {
|
||||
tp_for_each_touch(tp, t) {
|
||||
if (t->state == TOUCH_HOVERING) {
|
||||
/* avoid jumps when landing a finger */
|
||||
tp_motion_history_reset(t);
|
||||
tp_begin_touch(tp, t, time);
|
||||
|
||||
if (tp->nfingers_down >= nfake_touches)
|
||||
break;
|
||||
if (tp->nfingers_down >= nfake_touches)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1264,6 +1264,7 @@ evdev_read_model_flags(struct evdev_device *device)
|
|||
MODEL(APPLE_TOUCHPAD_ONEBUTTON),
|
||||
MODEL(LOGITECH_MARBLE_MOUSE),
|
||||
MODEL(TABLET_NO_PROXIMITY_OUT),
|
||||
MODEL(MS_NANO_TRANSCEIVER),
|
||||
#undef MODEL
|
||||
{ "ID_INPUT_TRACKBALL", EVDEV_MODEL_TRACKBALL },
|
||||
{ NULL, EVDEV_MODEL_DEFAULT },
|
||||
|
|
@ -1917,6 +1918,11 @@ evdev_device_create(struct libinput_seat *seat,
|
|||
const char *devnode = udev_device_get_devnode(udev_device);
|
||||
const char *sysname = udev_device_get_sysname(udev_device);
|
||||
|
||||
if (!devnode) {
|
||||
log_info(libinput, "%s: no device node associated\n", sysname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (udev_device_should_be_ignored(udev_device)) {
|
||||
log_debug(libinput, "%s: device is ignored\n", sysname);
|
||||
return NULL;
|
||||
|
|
@ -2434,6 +2440,9 @@ evdev_device_resume(struct evdev_device *device)
|
|||
return -ENODEV;
|
||||
|
||||
devnode = udev_device_get_devnode(device->udev_device);
|
||||
if (!devnode)
|
||||
return -ENODEV;
|
||||
|
||||
fd = open_restricted(libinput, devnode,
|
||||
O_RDWR | O_NONBLOCK | O_CLOEXEC);
|
||||
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ enum evdev_device_model {
|
|||
EVDEV_MODEL_APPLE_TOUCHPAD_ONEBUTTON = (1 << 25),
|
||||
EVDEV_MODEL_LOGITECH_MARBLE_MOUSE = (1 << 26),
|
||||
EVDEV_MODEL_TABLET_NO_PROXIMITY_OUT = (1 << 27),
|
||||
EVDEV_MODEL_MS_NANO_TRANSCEIVER = (1 << 28),
|
||||
};
|
||||
|
||||
enum evdev_button_scroll_state {
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@ libdir="$1"
|
|||
sofile=$(basename "$2")
|
||||
|
||||
if command -v restorecon >/dev/null; then
|
||||
echo "Restoring SELinux context on $MESON_INSTALL_DESTDIR_PREFIX/$libdir/$sofile"
|
||||
restorecon "$MESON_INSTALL_DESTDIR_PREFIX/$libdir/$sofile"
|
||||
echo "Restoring SELinux context on ${DESTDIR}${libdir}/${sofile}"
|
||||
restorecon "${DESTDIR}${libdir}/${sofile}"
|
||||
fi
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ udev_input_enable(struct libinput *libinput)
|
|||
struct udev *udev = input->udev;
|
||||
int fd;
|
||||
|
||||
if (input->udev_monitor)
|
||||
if (input->udev_monitor || !input->seat_id)
|
||||
return 0;
|
||||
|
||||
input->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
|
||||
|
|
|
|||
59
test/litest-device-ms-nano-transceiver-mouse.c
Normal file
59
test/litest-device-ms-nano-transceiver-mouse.c
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* Copyright © 2018 Red Hat, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the next
|
||||
* paragraph) shall be included in all copies or substantial portions of the
|
||||
* Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "litest.h"
|
||||
#include "litest-int.h"
|
||||
|
||||
static struct input_id input_id = {
|
||||
.bustype = 0x3,
|
||||
.vendor = 0x045e,
|
||||
.product = 0x0800,
|
||||
};
|
||||
|
||||
static int events[] = {
|
||||
EV_KEY, BTN_LEFT,
|
||||
EV_KEY, BTN_RIGHT,
|
||||
EV_KEY, BTN_MIDDLE,
|
||||
EV_KEY, BTN_SIDE,
|
||||
EV_KEY, BTN_EXTRA,
|
||||
EV_REL, REL_X,
|
||||
EV_REL, REL_Y,
|
||||
EV_REL, REL_WHEEL,
|
||||
EV_REL, REL_DIAL,
|
||||
EV_REL, REL_HWHEEL,
|
||||
-1 , -1,
|
||||
};
|
||||
|
||||
TEST_DEVICE("ms-nano-mouse",
|
||||
.type = LITEST_MS_NANO_TRANSCEIVER_MOUSE,
|
||||
.features = LITEST_RELATIVE | LITEST_BUTTON | LITEST_WHEEL | LITEST_NO_DEBOUNCE,
|
||||
.interface = NULL,
|
||||
|
||||
.name = "Microsoft Microsoft® Nano Transceiver v2.0",
|
||||
.id = &input_id,
|
||||
.absinfo = NULL,
|
||||
.events = events,
|
||||
)
|
||||
|
||||
|
|
@ -270,6 +270,7 @@ enum litest_device_type {
|
|||
LITEST_WACOM_BAMBOO_2FG_PEN,
|
||||
LITEST_WACOM_BAMBOO_2FG_FINGER,
|
||||
LITEST_HP_WMI_HOTKEYS,
|
||||
LITEST_MS_NANO_TRANSCEIVER_MOUSE,
|
||||
};
|
||||
|
||||
enum litest_device_feature {
|
||||
|
|
@ -303,6 +304,7 @@ enum litest_device_feature {
|
|||
LITEST_LEDS = 1 << 25,
|
||||
LITEST_SWITCH = 1 << 26,
|
||||
LITEST_IGNORED = 1 << 27,
|
||||
LITEST_NO_DEBOUNCE = 1 << 28,
|
||||
};
|
||||
|
||||
/* this is a semi-mt device, so we keep track of the touches that the tests
|
||||
|
|
|
|||
|
|
@ -2602,11 +2602,11 @@ litest_setup_tests_pointer(void)
|
|||
|
||||
litest_add("pointer:time", pointer_time_usec, LITEST_RELATIVE, LITEST_ANY);
|
||||
|
||||
litest_add_ranged("pointer:debounce", debounce_bounce, LITEST_BUTTON, LITEST_TOUCHPAD, &buttons);
|
||||
litest_add("pointer:debounce", debounce_bounce_check_immediate, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||
litest_add_ranged("pointer:debounce", debounce_spurious, LITEST_BUTTON, LITEST_TOUCHPAD, &buttons);
|
||||
litest_add("pointer:debounce", debounce_spurious_multibounce, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_dont_enable_on_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_cancel_debounce_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_switch_to_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD);
|
||||
litest_add_ranged("pointer:debounce", debounce_bounce, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE, &buttons);
|
||||
litest_add("pointer:debounce", debounce_bounce_check_immediate, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||
litest_add_ranged("pointer:debounce", debounce_spurious, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE, &buttons);
|
||||
litest_add("pointer:debounce", debounce_spurious_multibounce, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_dont_enable_on_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_cancel_debounce_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||
litest_add("pointer:debounce_otherbutton", debounce_spurious_switch_to_otherbutton, LITEST_BUTTON, LITEST_TOUCHPAD|LITEST_NO_DEBOUNCE);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1591,6 +1591,48 @@ START_TEST(touchpad_3fg_tap_quickrelease)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(touchpad_3fg_tap_hover_btntool)
|
||||
{
|
||||
struct litest_device *dev = litest_current_device();
|
||||
struct libinput *li = dev->libinput;
|
||||
|
||||
if (libevdev_get_abs_maximum(dev->evdev,
|
||||
ABS_MT_SLOT) >= 2)
|
||||
return;
|
||||
|
||||
litest_enable_tap(dev->libinput_device);
|
||||
litest_enable_edge_scroll(dev);
|
||||
|
||||
litest_drain_events(li);
|
||||
|
||||
litest_touch_down(dev, 0, 50, 50);
|
||||
litest_touch_down(dev, 1, 70, 50);
|
||||
libinput_dispatch(li);
|
||||
|
||||
litest_touch_move_to(dev, 0, 50, 50, 50, 70, 10, 0);
|
||||
litest_touch_move_to(dev, 1, 70, 50, 50, 70, 10, 0);
|
||||
litest_drain_events(li);
|
||||
|
||||
/* drop below the pressure threshold in the same frame as starting a */
|
||||
litest_event(dev, EV_ABS, ABS_MT_PRESSURE, 3);
|
||||
litest_event(dev, EV_ABS, ABS_PRESSURE, 3);
|
||||
litest_event(dev, EV_KEY, BTN_TOUCH, 0);
|
||||
litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 0);
|
||||
litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 1);
|
||||
litest_event(dev, EV_SYN, SYN_REPORT, 0);
|
||||
libinput_dispatch(li);
|
||||
|
||||
litest_push_event_frame(dev);
|
||||
litest_event(dev, EV_KEY, BTN_TOOL_DOUBLETAP, 1);
|
||||
litest_event(dev, EV_KEY, BTN_TOOL_TRIPLETAP, 0);
|
||||
litest_pop_event_frame(dev);
|
||||
litest_assert_empty_queue(li);
|
||||
|
||||
litest_touch_up(dev, 0);
|
||||
litest_touch_up(dev, 1);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(touchpad_3fg_tap_btntool)
|
||||
{
|
||||
struct litest_device *dev = litest_current_device();
|
||||
|
|
@ -3273,6 +3315,7 @@ litest_setup_tests_touchpad_tap(void)
|
|||
litest_add_ranged("tap-3fg:3fg", touchpad_3fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH, &tap_map_range);
|
||||
litest_add("tap-3fg:3fg", touchpad_3fg_tap_tap_again, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
|
||||
litest_add("tap-3fg:3fg", touchpad_3fg_tap_quickrelease, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
|
||||
litest_add("tap-3fg:3fg", touchpad_3fg_tap_hover_btntool, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH);
|
||||
litest_add_for_device("tap-3fg:3fg", touchpad_3fg_tap_btntool_pointerjump, LITEST_SYNAPTICS_TOPBUTTONPAD);
|
||||
litest_add("tap-4fg:4fg", touchpad_4fg_tap, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
|
||||
litest_add("tap-4fg:4fg", touchpad_4fg_tap_quickrelease, LITEST_TOUCHPAD, LITEST_SINGLE_TOUCH|LITEST_SEMI_MT);
|
||||
|
|
|
|||
|
|
@ -394,6 +394,47 @@ START_TEST(udev_suspend_resume)
|
|||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(udev_resume_before_seat)
|
||||
{
|
||||
struct libinput *li;
|
||||
struct udev *udev;
|
||||
int rc;
|
||||
|
||||
udev = udev_new();
|
||||
ck_assert(udev != NULL);
|
||||
|
||||
li = libinput_udev_create_context(&simple_interface, NULL, udev);
|
||||
ck_assert(li != NULL);
|
||||
|
||||
rc = libinput_resume(li);
|
||||
ck_assert_int_eq(rc, 0);
|
||||
|
||||
libinput_unref(li);
|
||||
udev_unref(udev);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(udev_suspend_resume_before_seat)
|
||||
{
|
||||
struct libinput *li;
|
||||
struct udev *udev;
|
||||
int rc;
|
||||
|
||||
udev = udev_new();
|
||||
ck_assert(udev != NULL);
|
||||
|
||||
li = libinput_udev_create_context(&simple_interface, NULL, udev);
|
||||
ck_assert(li != NULL);
|
||||
|
||||
libinput_suspend(li);
|
||||
rc = libinput_resume(li);
|
||||
ck_assert_int_eq(rc, 0);
|
||||
|
||||
libinput_unref(li);
|
||||
udev_unref(udev);
|
||||
}
|
||||
END_TEST
|
||||
|
||||
START_TEST(udev_device_sysname)
|
||||
{
|
||||
struct libinput *li;
|
||||
|
|
@ -619,6 +660,8 @@ litest_setup_tests_udev(void)
|
|||
litest_add_for_device("udev:suspend", udev_double_suspend, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:suspend", udev_double_resume, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:suspend", udev_suspend_resume, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:suspend", udev_resume_before_seat, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:suspend", udev_suspend_resume_before_seat, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:device events", udev_device_sysname, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
litest_add_for_device("udev:seat", udev_seat_recycle, LITEST_SYNAPTICS_CLICKPAD_X220);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# This does not honor $bindir properly, because we cannot get to it
|
||||
# here. Does anyone build to something but prefix/bin?
|
||||
#
|
||||
bindir="${DESTDIR}/${MESON_INSTALL_PREFIX}/bin"
|
||||
mkdir -p "$bindir"
|
||||
|
||||
bindir="${DESTDIR}${1}"
|
||||
|
||||
# Do not create bindir, because if it is not there now, we have a problem
|
||||
cp "${MESON_SOURCE_ROOT}/tools/libinput-list-devices.compat" "${bindir}/libinput-list-devices"
|
||||
cp "${MESON_SOURCE_ROOT}/tools/libinput-debug-events.compat" "${bindir}/libinput-debug-events"
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@ class Device(object):
|
|||
ud = pyudev.Devices.from_device_file(context, self.path)
|
||||
v = ud.get('LIBINPUT_ATTR_TOUCH_SIZE_RANGE')
|
||||
if v:
|
||||
self.up, self.down = colon_tuple(v)
|
||||
self.down, self.up = colon_tuple(v)
|
||||
|
||||
v = ud.get('LIBINPUT_ATTR_PALM_SIZE_THRESHOLD')
|
||||
if v:
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#!/usr/bin/python3
|
||||
#!/usr/bin/env python3
|
||||
# vim: set expandtab shiftwidth=4:
|
||||
# -*- Mode: python; coding: utf-8; indent-tabs-mode: nil -*- */
|
||||
#
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ main(int argc, char **argv)
|
|||
{ 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
c = getopt_long(argc, argv, "h", opts, &option_index);
|
||||
c = getopt_long(argc, argv, "+h", opts, &option_index);
|
||||
if (c == -1)
|
||||
break;
|
||||
|
||||
|
|
|
|||
|
|
@ -229,6 +229,10 @@ libinput:name:*Lid Switch*:dmi:*svnMicrosoftCorporation:pnSurface3:*
|
|||
libinput:name:*Microsoft Surface Type Cover Keyboard*:dmi:*svnMicrosoftCorporation:pnSurface3:*
|
||||
LIBINPUT_ATTR_KEYBOARD_INTEGRATION=internal
|
||||
|
||||
# Microsoft Microsoft® Nano Transceiver v2.0"
|
||||
libinput:mouse:input:b0003v045Ep0800*
|
||||
LIBINPUT_MODEL_MS_NANO_TRANSCEIVER=1
|
||||
|
||||
##########################################
|
||||
# Razer
|
||||
##########################################
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue