configure.ac | 4 +-- doc/Makefile.am | 12 +++++++++-- src/evdev-mt-touchpad-gestures.c | 2 - src/evdev-mt-touchpad.c | 4 ++- src/evdev-tablet-pad.c | 4 +++ src/evdev.c | 6 ++++- src/libinput.h | 21 ++++++++++++++------ test/keyboard.c | 38 +++++++++++++++++++++++++++++++++++++ udev/90-libinput-model-quirks.hwdb | 8 +++++++ 9 files changed, 86 insertions(+), 13 deletions(-)
New commits: commit 568be0867f7ac8c37912ad6724a053f40f6aae51 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Mon May 30 08:51:11 2016 +1000 configure.ac: libinput 1.3.1 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index a44d84c..3cf46d4 100644 --- a/configure.ac +++ b/configure.ac @@ -2,7 +2,7 @@ AC_PREREQ([2.64]) m4_define([libinput_major_version], [1]) m4_define([libinput_minor_version], [3]) -m4_define([libinput_micro_version], [0]) +m4_define([libinput_micro_version], [1]) m4_define([libinput_version], [libinput_major_version.libinput_minor_version.libinput_micro_version]) @@ -35,7 +35,7 @@ AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz]) # b) If interfaces have been changed or added, but binary compatibility has # been preserved, change to C+1:0:A+1 # c) If the interface is the same as the previous version, change to C:R+1:A -LIBINPUT_LT_VERSION=18:3:8 +LIBINPUT_LT_VERSION=18:4:8 AC_SUBST(LIBINPUT_LT_VERSION) AM_SILENT_RULES([yes]) commit 0d5d367a82d250d3cdf4b1e21c48bf1cf81b8d7a Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Fri May 27 10:35:34 2016 +1000 doc: add the missing svg files to the Makefile.am Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 8d80aae784dececda72ff6c9409b4d421a887f20) diff --git a/doc/Makefile.am b/doc/Makefile.am index 58effde..62630d0 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -39,15 +39,23 @@ diagram_files = \ $(srcdir)/dot/evemu.gv \ $(srcdir)/svg/button-scrolling.svg \ $(srcdir)/svg/clickfinger.svg \ + $(srcdir)/svg/clickfinger-distance.svg \ $(srcdir)/svg/edge-scrolling.svg \ + $(srcdir)/svg/gesture-2fg-ambiguity.svg \ $(srcdir)/svg/palm-detection.svg \ $(srcdir)/svg/pinch-gestures.svg \ + $(srcdir)/svg/pinch-gestures-softbuttons.svg \ $(srcdir)/svg/ptraccel-linear.svg \ $(srcdir)/svg/ptraccel-low-dpi.svg \ $(srcdir)/svg/ptraccel-touchpad.svg \ $(srcdir)/svg/ptraccel-trackpoint.svg \ $(srcdir)/svg/software-buttons.svg \ $(srcdir)/svg/swipe-gestures.svg \ + $(srcdir)/svg/tablet-axes.svg \ + $(srcdir)/svg/tablet-interfaces.svg \ + $(srcdir)/svg/tablet-left-handed.svg \ + $(srcdir)/svg/tablet-out-of-bounds.svg \ + $(srcdir)/svg/tablet.svg \ $(srcdir)/svg/tap-n-drag.svg \ $(srcdir)/svg/thumb-detection.svg \ $(srcdir)/svg/top-software-buttons.svg \ commit 0694e46ccf0a6337441d5e02fb5049f12d97c8cf Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Fri May 27 10:33:24 2016 +1000 doc: sort the svg files alphabetically Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 7f9c1f1c6c624252fa50693b05f595304aa26764) diff --git a/doc/Makefile.am b/doc/Makefile.am index f56ed6a..58effde 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -37,9 +37,8 @@ diagram_files = \ $(srcdir)/dot/libinput-stack-xorg.gv \ $(srcdir)/dot/libinput-stack-gnome.gv \ $(srcdir)/dot/evemu.gv \ - $(srcdir)/svg/software-buttons.svg \ - $(srcdir)/svg/clickfinger.svg \ $(srcdir)/svg/button-scrolling.svg \ + $(srcdir)/svg/clickfinger.svg \ $(srcdir)/svg/edge-scrolling.svg \ $(srcdir)/svg/palm-detection.svg \ $(srcdir)/svg/pinch-gestures.svg \ @@ -47,6 +46,7 @@ diagram_files = \ $(srcdir)/svg/ptraccel-low-dpi.svg \ $(srcdir)/svg/ptraccel-touchpad.svg \ $(srcdir)/svg/ptraccel-trackpoint.svg \ + $(srcdir)/svg/software-buttons.svg \ $(srcdir)/svg/swipe-gestures.svg \ $(srcdir)/svg/tap-n-drag.svg \ $(srcdir)/svg/thumb-detection.svg \ commit 97ff0002e9b9276819e1caaad204711948bde2bb Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Thu May 26 08:40:17 2016 +1000 pad: ignore EV_MSC events The Wacom Express Key Remote sends the serial number via EV_MSC. At some later point we'll need the serial to match the LEDs correctly but for now we can ignore them. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 0933650f664560f81145c780ea982f49d4df1924) diff --git a/src/evdev-tablet-pad.c b/src/evdev-tablet-pad.c index ad6ead8..5341657 100644 --- a/src/evdev-tablet-pad.c +++ b/src/evdev-tablet-pad.c @@ -403,6 +403,10 @@ pad_process(struct evdev_dispatch *dispatch, case EV_SYN: pad_flush(pad, device, time); break; + case EV_MSC: + /* The EKR sends the serial as MSC_SERIAL, ignore this for + * now */ + break; default: log_error(device->base.seat->libinput, "Unexpected event type %s (%#x)\n", commit 23bacd16c348e48465f84188c84a2500ecc18002 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 24 11:47:48 2016 +1000 doc: update ref/unref behavior for the tablet tool Brings it in line with the rest of libinput. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 40e3fe23849e90e50c6bdb4e848b7be120c101a1) diff --git a/src/libinput.h b/src/libinput.h index 5b08035..3053909 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1889,10 +1889,13 @@ libinput_event_tablet_tool_get_y_transformed(struct libinput_event_tablet_tool * * * Returns the tool that was in use during this event. * - * If the caller holds at least one reference (see - * libinput_tablet_tool_ref()), this struct is used whenever the - * tools enters proximity. Otherwise, if no references remain when the tool - * leaves proximity, the tool may be destroyed. + * The returned tablet tool is not refcounted and may become invalid after + * the next call to libinput. Use libinput_tablet_tool_ref() and + * libinput_tablet_tool_unref() to continue using the handle outside of the + * immediate scope. + * + * If the caller holds at least one reference, this struct is used + * whenever the tools enters proximity again. * * @note Physical tool tracking requires hardware support. If unavailable, * libinput creates one tool per type per tablet. See @ref commit 5acd9a373b5fa2a9652d5852b4d282edf8d765e5 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 24 11:33:50 2016 +1000 doc: update doc to explicitly state that the seat isn't referenced Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit c2dfe504ed7110e1cf85c52f7b8495dc0b5f08d8) diff --git a/src/libinput.h b/src/libinput.h index 6318484..5b08035 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -3066,6 +3066,11 @@ libinput_device_get_output_name(struct libinput_device *device); * seat name pair at any given time, but if no external reference is kept, it * may be destroyed if no device belonging to it is left. * + * The returned seat is not refcounted and may become invalid after + * the next call to libinput. Use libinput_seat_ref() and + * libinput_seat_unref() to continue using the handle outside of the + * immediate scope. + * * @param device A previously obtained device * @return The seat this input device belongs to */ commit e2c54e1db2c9c8cd0e8193f55e97fb0c5a962b05 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Thu May 19 14:40:33 2016 +1000 udev: mark ALPS touchpads fw version 300 as wobbly touchpads Includes the Dell Lattitude E5420 but since all alps touchpads with the same fw version are the same (as far as we know) hooking this off the firmware version should cover this generation. https://bugzilla.redhat.com/show_bug.cgi?id=1336084 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Hans de Goede <hdego...@redhat.com> (cherry picked from commit cebbe0c2da6ae71f670c2aff2d6263b7518f9249) diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb index 8e15246..88f3243 100644 --- a/udev/90-libinput-model-quirks.hwdb +++ b/udev/90-libinput-model-quirks.hwdb @@ -26,6 +26,10 @@ libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:800 libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:800 LIBINPUT_ATTR_SIZE_HINT=100x55 +libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:300 +libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:300 + LIBINPUT_MODEL_WOBBLY_TOUCHPAD=1 + libinput:name:*AlpsPS/2 ALPS DualPoint TouchPad:fwversion:310 libinput:name:*AlpsPS/2 ALPS GlidePoint:fwversion:310 LIBINPUT_MODEL_ALPS_RUSHMORE=1 commit dca336086663e65ab59c94b028e255b8ac1dd517 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Thu May 19 15:04:24 2016 +1000 udev: add the Yoga 2 to the wobbly touchpads https://bugs.freedesktop.org/show_bug.cgi?id=95290 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Hans de Goede <hdego...@redhat.com> (cherry picked from commit 595b5f6ae7b5236e0115ce3695eddb6da7552a3d) diff --git a/udev/90-libinput-model-quirks.hwdb b/udev/90-libinput-model-quirks.hwdb index 91ac243..8e15246 100644 --- a/udev/90-libinput-model-quirks.hwdb +++ b/udev/90-libinput-model-quirks.hwdb @@ -115,6 +115,10 @@ libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*:pvrThinkPad??60*: libinput:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*:pvrThinkPadX1Carbon3rd:* LIBINPUT_MODEL_LENOVO_T450_TOUCHPAD=1 +# Lenovo Yoga 2013 +libinput:name:*SynPS/2 Synaptics TouchPad*:dmi:*svnLENOVO*pvrLenovoYoga213:* + LIBINPUT_MODEL_WOBBLY_TOUCHPAD=1 + ########################################## # Synaptics ########################################## commit c69a5bb78500520102086273f13e94e9c9f019ae Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Thu May 19 16:03:20 2016 +1000 doc: fix a few typos Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 5f4f211d6dac3bbbf0645c41ee93f9e4297c8fbb) diff --git a/src/libinput.h b/src/libinput.h index a93676e..6318484 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -1999,7 +1999,7 @@ libinput_event_tablet_tool_get_time_usec(struct libinput_event_tablet_tool *even /** * @ingroup event_tablet * - * Return the type of tool type for a tool object, see @ref + * Return the tool type for a tool object, see @ref * tablet-tool-types for details. * * @param tool The libinput tool @@ -2047,7 +2047,8 @@ libinput_tablet_tool_ref(struct libinput_tablet_tool *tool); * @ingroup event_tablet * * Decrement the reference count of the tool by one. When the reference - * count of tool reaches 0, the memory allocated for tool will be freed. + * count of the tool reaches 0, the memory allocated for the tool will be + * freed. * * @param tool The tool to decrement the ref count of * @return NULL if the tool was destroyed otherwise the passed tool commit 58f6eed9dbb4662e978dd9f5fe0a6e51e97e5320 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Wed May 18 07:35:36 2016 +1000 touchpad: only use negative pressure change check on Lenovo *50 and *60 series This was introduced for bug 94379 - an X1 Carbon 3rd. Other touchpads have different pressure change ranges, causing this condition to trigger randomly and resulting in a jerky pointer motion. For now, reduce the check to the *50 and *60 series touchpads until we have data for more touchpads that we can add one-by-one. https://bugs.freedesktop.org/show_bug.cgi?id=95393 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Hans de Goede <hdego...@redhat.com> (cherry picked from commit 2f5231cc88fccf389a78270d827f6c9201b86794) diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c index 4c8c3a3..c854043 100644 --- a/src/evdev-mt-touchpad.c +++ b/src/evdev-mt-touchpad.c @@ -928,6 +928,7 @@ tp_detect_jumps(const struct tp_dispatch *tp, struct tp_touch *t) static void tp_process_state(struct tp_dispatch *tp, uint64_t time) { + struct evdev_device *device = tp->device; struct tp_touch *t; unsigned int i; bool restart_filter = false; @@ -953,7 +954,8 @@ tp_process_state(struct tp_dispatch *tp, uint64_t time) if (!t->dirty) continue; - if (t->pressure_delta < -7) + if ((device->model_flags & EVDEV_MODEL_LENOVO_T450_TOUCHPAD) && + t->pressure_delta < -7) tp_motion_history_reset(t); if (tp_detect_jumps(tp, t)) { commit 544d4b6b74ebce289228bd556c7bffeeb4f4f294 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 10 12:07:36 2016 +1000 evdev: the range between dpad and trigger-happy are keys, not buttons Affected keys: KEY_ALS_TOGGLE KEY_BUTTONCONFIG KEY_TASKMANAGER KEY_JOURNAL KEY_CONTROLPANEL KEY_APPSELECT KEY_SCREENSAVER KEY_VOICECOMMAND KEY_BRIGHTNESS_MIN KEY_BRIGHTNESS_MAX KEY_KBDINPUTASSIST_PREV KEY_KBDINPUTASSIST_NEXT KEY_KBDINPUTASSIST_PREVGROUP KEY_KBDINPUTASSIST_NEXTGROUP KEY_KBDINPUTASSIST_ACCEPT KEY_KBDINPUTASSIST_CANCEL https://bugs.freedesktop.org/show_bug.cgi?id=95295 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 8527242ed9bdfc97ba248d3e36a1641213e62ca2) diff --git a/src/evdev.c b/src/evdev.c index bcd9c5b..cd05cfc 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -568,7 +568,11 @@ get_key_type(uint16_t code) return EVDEV_KEY_TYPE_BUTTON; if (code >= KEY_OK && code <= KEY_LIGHTS_TOGGLE) return EVDEV_KEY_TYPE_KEY; - if (code >= BTN_DPAD_UP && code <= BTN_TRIGGER_HAPPY40) + if (code >= BTN_DPAD_UP && code <= BTN_DPAD_RIGHT) + return EVDEV_KEY_TYPE_BUTTON; + if (code >= KEY_ALS_TOGGLE && code <= KEY_KBDINPUTASSIST_CANCEL) + return EVDEV_KEY_TYPE_KEY; + if (code >= BTN_TRIGGER_HAPPY && code <= BTN_TRIGGER_HAPPY40) return EVDEV_KEY_TYPE_BUTTON; return EVDEV_KEY_TYPE_NONE; } diff --git a/test/keyboard.c b/test/keyboard.c index b2f9851..f3aa9df 100644 --- a/test/keyboard.c +++ b/test/keyboard.c @@ -342,6 +342,42 @@ START_TEST(keyboard_time_usec) } END_TEST +START_TEST(keyboard_no_buttons) +{ + struct litest_device *dev = litest_current_device(); + struct libinput *li = dev->libinput; + struct libinput_event *event; + int code; + const char *name; + + litest_drain_events(dev->libinput); + + for (code = 0; code < KEY_MAX; code++) { + if (!libevdev_has_event_code(dev->evdev, EV_KEY, code)) + continue; + + name = libevdev_event_code_get_name(EV_KEY, code); + if (!name || !strneq(name, "KEY_", 4)) + continue; + + litest_keyboard_key(dev, code, true); + litest_keyboard_key(dev, code, false); + libinput_dispatch(li); + + event = libinput_get_event(li); + litest_is_keyboard_event(event, + code, + LIBINPUT_KEY_STATE_PRESSED); + libinput_event_destroy(event); + event = libinput_get_event(li); + litest_is_keyboard_event(event, + code, + LIBINPUT_KEY_STATE_RELEASED); + libinput_event_destroy(event); + } +} +END_TEST + void litest_setup_tests(void) { @@ -351,4 +387,6 @@ litest_setup_tests(void) litest_add("keyboard:keys", keyboard_has_key, LITEST_KEYS, LITEST_ANY); litest_add("keyboard:keys", keyboard_keys_bad_device, LITEST_ANY, LITEST_ANY); litest_add("keyboard:time", keyboard_time_usec, LITEST_KEYS, LITEST_ANY); + + litest_add("keyboard:events", keyboard_no_buttons, LITEST_KEYS, LITEST_ANY); } commit 31ffda96fac5785700aff40399f0c6aa4b4a6bb1 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Fri May 13 09:46:50 2016 +1000 gestures: don't send swipe gestures when gestures are disabled Introduced in 6ad303b as part of an code flow optimization, causing any 3+ finger gesture to be posted as swipe gesture, even when gestures are disabled. However, the event is filtered in the higher levels with a bug message printed to the log. Don't post swipe gestures for devices where gestures are disabled. https://bugs.freedesktop.org/show_bug.cgi?id=95314 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Hans de Goede <hdego...@redhat.com> (cherry picked from commit 98ee1791ca6496cfe353f729047786237f1ffd3a) diff --git a/src/evdev-mt-touchpad-gestures.c b/src/evdev-mt-touchpad-gestures.c index 7bbd3b8..2a804e7 100644 --- a/src/evdev-mt-touchpad-gestures.c +++ b/src/evdev-mt-touchpad-gestures.c @@ -248,7 +248,7 @@ tp_gesture_handle_state_none(struct tp_dispatch *tp, uint64_t time) if (ntouches == 2) return GESTURE_STATE_SCROLL; else - return GESTURE_STATE_SWIPE; + return GESTURE_STATE_NONE; } first = touches[0];