configure.ac | 10 debian/changelog | 43 debian/control | 41 debian/copyright | 49 debian/libinput-bin.install | 1 debian/libinput10-udeb.install | 1 debian/libinput10.symbols | 18 debian/patches/fix-premature-flushing-of-evdev-event-on-mx4.patch | 10 debian/patches/series | 1 debian/patches/touch-point-orientation-size.patch | 128 -- debian/patches/touchpad-add-a-middle-button-software-area.diff | 302 ---- debian/rules | 11 doc/Makefile.am | 13 doc/clickpad-softbuttons.dox | 14 doc/page-hierarchy.dox | 1 doc/svg/software-buttons.svg | 30 doc/svg/tablet-interfaces.svg | 325 +++++ doc/svg/tablet-left-handed.svg | 469 +++++++ doc/tablet-support.dox | 79 + doc/touchpad-jumping-cursors.dox | 54 src/Makefile.am | 2 src/evdev-mt-touchpad-buttons.c | 31 src/evdev-mt-touchpad-gestures.c | 2 src/evdev-mt-touchpad.c | 71 - src/evdev-mt-touchpad.h | 3 src/evdev-tablet-pad.c | 624 ++++++++++ src/evdev-tablet-pad.h | 69 + src/evdev-tablet.c | 88 - src/evdev-tablet.h | 2 src/evdev.c | 268 +++- src/evdev.h | 36 src/libinput-private.h | 26 src/libinput-util.h | 5 src/libinput.c | 257 ++++ src/libinput.h | 363 +++++ src/libinput.sym | 18 src/timer.c | 3 test/Makefile.am | 8 test/gestures.c | 8 test/keyboard.c | 42 test/litest-device-generic-singletouch.c | 1 test/litest-device-synaptics-x1-carbon-3rd.c | 11 test/litest-device-touchscreen-fuzz.c | 96 + test/litest-device-wacom-intuos3-pad.c | 117 + test/litest-device-wacom-intuos5-pad.c | 122 + test/litest-int.h | 16 test/litest.c | 272 ++++ test/litest.h | 134 +- test/misc.c | 51 test/pad.c | 431 ++++++ test/path.c | 2 test/pointer.c | 148 ++ test/tablet.c | 72 + test/touch.c | 50 test/touchpad-buttons.c | 30 test/touchpad.c | 112 + test/trackpoint.c | 1 tools/event-debug.c | 91 + tools/event-gui.c | 46 tools/publish-doc | 9 udev/90-libinput-model-quirks.hwdb | 36 61 files changed, 4654 insertions(+), 720 deletions(-)
New commits: commit e36c3a424b9bdcce7d427a10f11afed62c5cc9fb Author: Timo Aaltonen <tjaal...@debian.org> Date: Wed Jun 8 10:58:06 2016 +0300 release to yakkety diff --git a/debian/changelog b/debian/changelog index dcdc675..aacd389 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libinput (1.3.1-1ubuntu1) UNRELEASED; urgency=medium +libinput (1.3.1-1ubuntu1) yakkety; urgency=medium - * Merge from debian. + * Merge from debian. (LP: #1587396, #1571291) * Refresh patches, drop touchpad-add-a-middle-button-software-area.diff which is upstream. - -- Timo Aaltonen <tjaal...@debian.org> Wed, 08 Jun 2016 08:39:45 +0300 + -- Timo Aaltonen <tjaal...@debian.org> Wed, 08 Jun 2016 10:57:48 +0300 libinput (1.3.1-1) unstable; urgency=medium commit 98574efedddfc9511e71930394194443c73a709b Author: Timo Aaltonen <tjaal...@debian.org> Date: Wed Jun 8 10:57:46 2016 +0300 merge, update/drop patches diff --git a/debian/changelog b/debian/changelog index 5441be6..dcdc675 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +libinput (1.3.1-1ubuntu1) UNRELEASED; urgency=medium + + * Merge from debian. + * Refresh patches, drop touchpad-add-a-middle-button-software-area.diff + which is upstream. + + -- Timo Aaltonen <tjaal...@debian.org> Wed, 08 Jun 2016 08:39:45 +0300 + libinput (1.3.1-1) unstable; urgency=medium * New upstream release. diff --git a/debian/patches/fix-premature-flushing-of-evdev-event-on-mx4.patch b/debian/patches/fix-premature-flushing-of-evdev-event-on-mx4.patch index 0473fdf..d3254c4 100644 --- a/debian/patches/fix-premature-flushing-of-evdev-event-on-mx4.patch +++ b/debian/patches/fix-premature-flushing-of-evdev-event-on-mx4.patch @@ -17,7 +17,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> --- a/src/evdev.c +++ b/src/evdev.c -@@ -665,16 +665,16 @@ evdev_process_key(struct evdev_device *d +@@ -714,16 +714,16 @@ evdev_process_key(struct evdev_device *d if (e->value == 2) return; @@ -40,7 +40,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> if (e->value == 0) { --- a/test/touch.c +++ b/test/touch.c -@@ -912,6 +912,114 @@ START_TEST(touch_point_no_minor_or_orien +@@ -958,6 +958,114 @@ START_TEST(touch_point_no_minor_or_orien } END_TEST @@ -155,10 +155,10 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> void litest_setup_tests(void) { -@@ -942,4 +1050,6 @@ litest_setup_tests(void) - litest_add_ranged("touch:state", touch_initial_state, LITEST_TOUCH, LITEST_PROTOCOL_A, &axes); - +@@ -990,4 +1098,6 @@ litest_setup_tests(void) litest_add("touch:time", touch_time_usec, LITEST_TOUCH, LITEST_TOUCHPAD); + + litest_add_for_device("touch:fuzz", touch_fuzz, LITEST_MULTITOUCH_FUZZ_SCREEN); + + litest_add_no_device("touch:special events", touchscreen_with_btn_tool_finger_on_down); } diff --git a/debian/patches/series b/debian/patches/series index 1b21a7f..63b23e6 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,3 +1,2 @@ touch-point-orientation-size.patch fix-premature-flushing-of-evdev-event-on-mx4.patch -touchpad-add-a-middle-button-software-area.diff diff --git a/debian/patches/touch-point-orientation-size.patch b/debian/patches/touch-point-orientation-size.patch index 298a460..2c40b72 100644 --- a/debian/patches/touch-point-orientation-size.patch +++ b/debian/patches/touch-point-orientation-size.patch @@ -42,10 +42,10 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> $(srcdir)/test-suite.dox \ $(srcdir)/tools.dox \ + $(srcdir)/touch-event-properties.dox \ + $(srcdir)/touchpad-jumping-cursors.dox \ $(srcdir)/touchpads.dox - diagram_files = \ -@@ -51,6 +52,7 @@ diagram_files = \ +@@ -60,6 +61,7 @@ diagram_files = \ $(srcdir)/svg/thumb-detection.svg \ $(srcdir)/svg/top-software-buttons.svg \ $(srcdir)/svg/touchscreen-gestures.svg \ @@ -55,7 +55,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> style_files = \ --- a/doc/page-hierarchy.dox +++ b/doc/page-hierarchy.dox -@@ -11,6 +11,7 @@ +@@ -12,6 +12,7 @@ @page touchscreens Touchscreens - @subpage absolute_axes @@ -460,7 +460,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> +*/ --- a/src/evdev.c +++ b/src/evdev.c -@@ -45,6 +45,10 @@ +@@ -49,6 +49,10 @@ #define DEFAULT_WHEEL_CLICK_ANGLE 15 #define DEFAULT_MIDDLE_BUTTON_SCROLL_TIMEOUT ms2us(200) @@ -471,7 +471,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> enum evdev_key_type { EVDEV_KEY_TYPE_NONE, -@@ -258,6 +262,100 @@ evdev_device_transform_y(struct evdev_de +@@ -318,6 +322,100 @@ evdev_device_transform_y(struct evdev_de return scale_axis(device->abs.absinfo_y, y, height); } @@ -572,91 +572,37 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> static inline void normalize_delta(struct evdev_device *device, const struct device_coords *delta, -@@ -295,8 +393,15 @@ evdev_flush_pending_event(struct evdev_d - struct normalized_coords accel, unaccel; +@@ -382,6 +480,11 @@ evdev_flush_pending_event(struct evdev_d struct device_coords point; struct device_float_coords raw; -+ struct mt_slot *slot_data; + struct mt_slot *slot = NULL; + struct ellipse default_touch = { + .major = DEFAULT_TOUCH_MAJOR, + .minor = DEFAULT_TOUCH_MINOR, + .orientation = DEFAULT_TOUCH_ORIENTATION + }; - slot = device->mt.slot; -+ slot_data = &device->mt.slots[slot]; - - switch (device->pending_event) { - case EVDEV_NONE: -@@ -337,7 +442,7 @@ evdev_flush_pending_event(struct evdev_d - if (!(device->seat_caps & EVDEV_DEVICE_TOUCH)) - break; - -- if (device->mt.slots[slot].seat_slot != -1) { -+ if (slot_data->seat_slot != -1) { - log_bug_kernel(libinput, - "%s: Driver sent multiple touch down for the " - "same slot", -@@ -346,38 +451,48 @@ evdev_flush_pending_event(struct evdev_d - } - - seat_slot = ffs(~seat->slot_map) - 1; -- device->mt.slots[slot].seat_slot = seat_slot; -+ slot_data->seat_slot = seat_slot; - - if (seat_slot == -1) - break; - - seat->slot_map |= 1 << seat_slot; -- point = device->mt.slots[slot].point; -+ point = slot_data->point; + slot_idx = device->mt.slot; + if (device->mt.slots) +@@ -446,7 +549,7 @@ evdev_flush_pending_event(struct evdev_d evdev_transform_absolute(device, &point); -- touch_notify_touch_down(base, time, slot, seat_slot, + touch_notify_touch_down(base, time, slot_idx, seat_slot, - &point); -+ touch_notify_touch_down(base, -+ time, -+ slot, -+ seat_slot, -+ &point, -+ &slot_data->area, -+ slot_data->pressure); ++ &point, &slot->area, slot->pressure); break; case EVDEV_ABSOLUTE_MT_MOTION: if (!(device->seat_caps & EVDEV_DEVICE_TOUCH)) - break; - -- seat_slot = device->mt.slots[slot].seat_slot; -- point = device->mt.slots[slot].point; -+ seat_slot = slot_data->seat_slot; -+ point = slot_data->point; - - if (seat_slot == -1) - break; +@@ -463,7 +566,7 @@ evdev_flush_pending_event(struct evdev_d evdev_transform_absolute(device, &point); -- touch_notify_touch_motion(base, time, slot, seat_slot, + touch_notify_touch_motion(base, time, slot_idx, seat_slot, - &point); -+ touch_notify_touch_motion(base, -+ time, -+ slot, -+ seat_slot, -+ &point, -+ &slot_data->area, -+ slot_data->pressure); ++ &point, &slot->area, slot->pressure); break; case EVDEV_ABSOLUTE_MT_UP: if (!(device->seat_caps & EVDEV_DEVICE_TOUCH)) - break; - -- seat_slot = device->mt.slots[slot].seat_slot; -- device->mt.slots[slot].seat_slot = -1; -+ seat_slot = slot_data->seat_slot; -+ slot_data->seat_slot = -1; - - if (seat_slot == -1) - break; -@@ -409,7 +524,13 @@ evdev_flush_pending_event(struct evdev_d +@@ -502,7 +605,13 @@ evdev_flush_pending_event(struct evdev_d point = device->abs.point; evdev_transform_absolute(device, &point); @@ -671,7 +617,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> break; case EVDEV_ABSOLUTE_MOTION: point = device->abs.point; -@@ -421,8 +542,13 @@ evdev_flush_pending_event(struct evdev_d +@@ -514,8 +623,13 @@ evdev_flush_pending_event(struct evdev_d if (seat_slot == -1) break; @@ -687,7 +633,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> } else if (device->seat_caps & EVDEV_DEVICE_POINTER) { pointer_notify_motion_absolute(base, time, &point); } -@@ -596,8 +722,9 @@ evdev_process_touch(struct evdev_device +@@ -652,8 +766,9 @@ evdev_process_touch(struct evdev_device struct input_event *e, uint64_t time) { @@ -699,7 +645,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> if ((size_t)e->value >= device->mt.slots_len) { log_bug_libinput(device->base.seat->libinput, "%s exceeds slots (%d of %zd)\n", -@@ -608,8 +735,7 @@ evdev_process_touch(struct evdev_device +@@ -664,8 +779,7 @@ evdev_process_touch(struct evdev_device } evdev_flush_pending_event(device, time); device->mt.slot = e->value; @@ -709,7 +655,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> if (device->pending_event != EVDEV_NONE && device->pending_event != EVDEV_ABSOLUTE_MT_MOTION) evdev_flush_pending_event(device, time); -@@ -617,17 +743,34 @@ evdev_process_touch(struct evdev_device +@@ -673,17 +787,34 @@ evdev_process_touch(struct evdev_device device->pending_event = EVDEV_ABSOLUTE_MT_DOWN; else device->pending_event = EVDEV_ABSOLUTE_MT_UP; @@ -754,7 +700,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> } } -@@ -1989,6 +2132,20 @@ evdev_configure_mt_device(struct evdev_d +@@ -2051,6 +2182,20 @@ evdev_configure_mt_device(struct evdev_d slots[slot].point.y = libevdev_get_slot_value(evdev, slot, ABS_MT_POSITION_Y); @@ -775,7 +721,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> } device->mt.slots = slots; device->mt.slots_len = num_slots; -@@ -2060,6 +2217,15 @@ evdev_configure_device(struct evdev_devi +@@ -2120,6 +2265,15 @@ evdev_configure_device(struct evdev_devi return -1; } @@ -793,16 +739,16 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> --- a/src/evdev.h +++ b/src/evdev.h -@@ -119,6 +119,8 @@ enum evdev_device_model { - struct mt_slot { +@@ -122,6 +122,8 @@ struct mt_slot { int32_t seat_slot; struct device_coords point; + struct device_coords hysteresis_center; + struct ellipse area; + int32_t pressure; }; struct evdev_device { -@@ -135,6 +137,8 @@ struct evdev_device { +@@ -138,6 +140,8 @@ struct evdev_device { int fd; struct { const struct input_absinfo *absinfo_x, *absinfo_y; @@ -811,7 +757,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> int fake_resolution; struct device_coords point; -@@ -376,6 +380,26 @@ double +@@ -394,6 +398,26 @@ double evdev_device_transform_y(struct evdev_device *device, double y, uint32_t height); @@ -840,7 +786,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> --- a/src/libinput-private.h +++ b/src/libinput-private.h -@@ -40,6 +40,11 @@ struct device_coords { +@@ -48,6 +48,11 @@ struct device_coords { int x, y; }; @@ -852,7 +798,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> /* * A coordinate pair in device coordinates, capable of holding non discrete * values, this is necessary e.g. when device coordinates get averaged. -@@ -461,14 +466,18 @@ touch_notify_touch_down(struct libinput_ +@@ -469,14 +474,18 @@ touch_notify_touch_down(struct libinput_ uint64_t time, int32_t slot, int32_t seat_slot, @@ -875,7 +821,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> touch_notify_touch_up(struct libinput_device *device, --- a/src/libinput-util.h +++ b/src/libinput-util.h -@@ -145,6 +145,12 @@ msleep(unsigned int ms) +@@ -146,6 +146,12 @@ msleep(unsigned int ms) usleep(ms * 1000); } @@ -899,7 +845,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> }; struct libinput_event_gesture { -@@ -758,6 +760,204 @@ libinput_event_touch_get_y(struct libinp +@@ -788,6 +790,204 @@ libinput_event_touch_get_y(struct libinp return evdev_convert_to_mm(device->abs.absinfo_y, event->point.y); } @@ -1104,7 +1050,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> LIBINPUT_EXPORT uint32_t libinput_event_gesture_get_time(struct libinput_event_gesture *event) { -@@ -2113,7 +2313,9 @@ touch_notify_touch_down(struct libinput_ +@@ -2146,7 +2346,9 @@ touch_notify_touch_down(struct libinput_ uint64_t time, int32_t slot, int32_t seat_slot, @@ -1115,7 +1061,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> { struct libinput_event_touch *touch_event; -@@ -2129,6 +2331,8 @@ touch_notify_touch_down(struct libinput_ +@@ -2162,6 +2364,8 @@ touch_notify_touch_down(struct libinput_ .slot = slot, .seat_slot = seat_slot, .point = *point, @@ -1124,7 +1070,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> }; post_device_event(device, time, -@@ -2141,7 +2345,9 @@ touch_notify_touch_motion(struct libinpu +@@ -2174,7 +2378,9 @@ touch_notify_touch_motion(struct libinpu uint64_t time, int32_t slot, int32_t seat_slot, @@ -1135,7 +1081,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> { struct libinput_event_touch *touch_event; -@@ -2157,6 +2363,8 @@ touch_notify_touch_motion(struct libinpu +@@ -2190,6 +2396,8 @@ touch_notify_touch_motion(struct libinpu .slot = slot, .seat_slot = seat_slot, .point = *point, @@ -1146,7 +1092,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> post_device_event(device, time, --- a/src/libinput.h +++ b/src/libinput.h -@@ -1151,6 +1151,228 @@ libinput_event_touch_get_y_transformed(s +@@ -1233,6 +1233,228 @@ libinput_event_touch_get_y_transformed(s /** * @ingroup event_touch * @@ -1399,7 +1345,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> libinput_device_config_accel_get_profiles; --- a/test/touch.c +++ b/test/touch.c -@@ -673,6 +673,245 @@ START_TEST(touch_time_usec) +@@ -719,6 +719,245 @@ START_TEST(touch_fuzz) } END_TEST @@ -1645,7 +1591,7 @@ Signed-off-by: Andreas Pokorny <andreas.poko...@canonical.com> void litest_setup_tests(void) { -@@ -697,6 +936,8 @@ litest_setup_tests(void) +@@ -743,6 +982,8 @@ litest_setup_tests(void) litest_add("touch:protocol a", touch_protocol_a_init, LITEST_PROTOCOL_A, LITEST_ANY); litest_add("touch:protocol a", touch_protocol_a_touch, LITEST_PROTOCOL_A, LITEST_ANY); litest_add("touch:protocol a", touch_protocol_a_2fg_touch, LITEST_PROTOCOL_A, LITEST_ANY); diff --git a/debian/patches/touchpad-add-a-middle-button-software-area.diff b/debian/patches/touchpad-add-a-middle-button-software-area.diff deleted file mode 100644 index 441148a..0000000 --- a/debian/patches/touchpad-add-a-middle-button-software-area.diff +++ /dev/null @@ -1,302 +0,0 @@ -commit 886b5a2cd8c785e48ddf5ceb4a902cd1f518d2a9 -Author: Peter Hutterer <peter.hutte...@who-t.net> -Date: Mon Apr 4 10:06:36 2016 +1000 - - touchpad: add a middle button software area - - Middle button interaction is most commonly to paste and it is a single-event - interaction (button press). We provided middle button in software button mode - by emulating it with a two-finger press with L+R down at the same time. This - is also what many touchpads are spectacularly bad at, it is very common to - detect the physical button down event before the second finger registers, - resulting in left or right clicks where a middle button should be triggered. - - Unless the fingers are resting on the touchpad for at least one scanout, the - success rate for middle button emulation is only at 70% or so. - - This patch adds a 25%-width middle button area between the left and the right - software button, everything else stays the same. To avoid immediate breakage, - the middle button emulation remains but may be removed in the future. - The doc is updated to only refer to the middle button area now. - - https://bugs.freedesktop.org/show_bug.cgi?id=94755 - - Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> - Reviewed-by: Hans de Goede <hdego...@redhat.com> - -diff --git a/doc/clickpad-softbuttons.dox b/doc/clickpad-softbuttons.dox -index a4f2e44..cf4c8c9 100644 ---- a/doc/clickpad-softbuttons.dox -+++ b/doc/clickpad-softbuttons.dox -@@ -20,16 +20,20 @@ generated by libinput and passed to the caller in response to a click. - @section software_buttons Software button areas - - On most clickpads, this is the default behavior. The bottom of the touchpad --is split in the middle to generate left or right button events on click. The --height of the button area depends on the hardware but is usually around --10mm. -+is split into three distinct areas generate left, middle or right button -+events on click. The height of the button area depends on the hardware but -+is usually around 10mm. - - Left, right and middle button events can be triggered as follows: - - if a finger is in the main area or the left button area, a click generates - left button events. - - if a finger is in the right area, a click generates right button events. --- if there is a finger in both the left and right button area, a click -- generates middle button events. -+- if a finger is in the middle area, a click generates middle button events. -+ -+The middle button is always centered on the touchpad and smaller in size -+than the left or right button. The actual size is device-dependent though as -+many touchpads do not have visible markings for the middle button the exact -+location of the button is not visibly obvious. - - @image html software-buttons.svg "Left, right and middle-button click with software button areas" - -diff --git a/doc/svg/software-buttons.svg b/doc/svg/software-buttons.svg -index 903535c..c0bc610 100644 ---- a/doc/svg/software-buttons.svg -+++ b/doc/svg/software-buttons.svg -@@ -41,8 +41,8 @@ - id="namedview4312" - showgrid="false" - inkscape:zoom="0.57798581" -- inkscape:cx="1134.9723" -- inkscape:cy="-71.183873" -+ inkscape:cx="842.57758" -+ inkscape:cy="-74.644166" - inkscape:window-x="0" - inkscape:window-y="27" - inkscape:window-maximized="1" -@@ -106,7 +106,7 @@ - id="rect2858-7" - style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.19376326;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" /> - <g -- transform="matrix(0.79657897,0.11742288,-0.14814182,0.631399,665.11943,-345.64117)" -+ transform="matrix(0.79657897,0.11742288,-0.14814182,0.631399,749.8966,-336.99044)" - id="g3663-9-8"> - <path - d="m 388.57143,893.79076 -57.14285,-130 c 0,0 -30.0247,-58.84827 4.28571,-70.00001 27.07438,-8.79984 37.32196,9.59496 40,14.64286 27.54455,51.91936 84.64285,173.21429 84.64285,173.21429 l -0.71428,0 -71.07143,12.14286 z" -@@ -125,30 +125,6 @@ - inkscape:connector-curvature="0" /> - </g> - <g -- id="g4656" -- transform="translate(-0.31997204,0.28487182)"> -- <g -- id="g4639"> -- <path -- inkscape:connector-curvature="0" -- style="fill:none;stroke:#000000;stroke-width:0.72135597px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" -- id="path2820-0-5" -- d="m 970.15914,263.93369 32.58666,-97.47985 c 0,0 12.2603,-46.32869 38.5506,-33.925 20.7457,9.78778 17.4301,24.72594 16.4399,28.75425 -10.1846,41.43257 -30.105,105.84033 -30.105,105.84033 l -0.428,-0.37827 z" -- sodipodi:nodetypes="ccssccc" /> -- <path -- inkscape:connector-curvature="0" -- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffccaa;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.00144271;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" -- id="path2824-9-3" -- d="m 987.16367,214.84092 c 8.97014,-26.84686 16.75933,-50.19953 17.30923,-51.89481 3.8651,-11.91483 10.3862,-22.76212 16.5622,-27.54951 6.8496,-5.30946 13.8243,-5.75615 21.9108,-1.40323 3.7999,2.04543 6.0302,3.61208 8.2265,5.77836 2.5214,2.487 3.6881,4.17002 5.1008,7.35828 1.3655,3.08181 1.9391,7.11725 1.5051,10.58923 -0.597,4.77663 -10.2821,40.41668 -20.9931,77.25236 -7.7256,26.56907 -9.371,31.11182 -9.5644,31.10964 -0.1479,-0.002 -55.70067,-1.83937 -56.08626,-2.18017 -0.16723,-0.1478 6.29681,-19.93218 16.02913,-49.06015 z" -- sodipodi:nodetypes="scsssscsccs" /> -- <path -- inkscape:connector-curvature="0" -- style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.92000002;fill:#ffe6d5;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.2;marker:none;enable-background:accumulate" -- id="path2824-7-8-8" -- d="m 1008.3595,164.57667 c 3.8651,-11.91483 7.6606,-19.35039 13.8366,-24.13778 6.8495,-5.30946 12.0833,-5.57765 20.1698,-1.22474 9.3061,4.73331 12.9905,9.62271 11.9094,19.03362 -6.3459,19.3209 -6.9054,22.12042 -9.2168,26.32727 -0.1479,-0.002 -33.6651,-14.70742 -35.0296,-15.23839 -1.4035,-0.54616 -1.8884,-3.70289 -1.6694,-4.75998 z" /> -- </g> -- </g> -- <g - transform="translate(-386.56163,2.2570367)" - id="g4656-3"> - <g -diff --git a/src/evdev-mt-touchpad-buttons.c b/src/evdev-mt-touchpad-buttons.c -index 076eab0..a9b7521 100644 ---- a/src/evdev-mt-touchpad-buttons.c -+++ b/src/evdev-mt-touchpad-buttons.c -@@ -64,6 +64,7 @@ static inline const char* - button_event_to_str(enum button_event event) { - switch(event) { - CASE_RETURN_STRING(BUTTON_EVENT_IN_BOTTOM_R); -+ CASE_RETURN_STRING(BUTTON_EVENT_IN_BOTTOM_M); - CASE_RETURN_STRING(BUTTON_EVENT_IN_BOTTOM_L); - CASE_RETURN_STRING(BUTTON_EVENT_IN_TOP_R); - CASE_RETURN_STRING(BUTTON_EVENT_IN_TOP_M); -@@ -93,10 +94,20 @@ is_inside_bottom_right_area(const struct tp_dispatch *tp, - } - - static inline bool -+is_inside_bottom_middle_area(const struct tp_dispatch *tp, -+ const struct tp_touch *t) -+{ -+ return is_inside_bottom_button_area(tp, t) && -+ !is_inside_bottom_right_area(tp, t) && -+ t->point.x > tp->buttons.bottom_area.middlebutton_left_edge; -+} -+ -+static inline bool - is_inside_bottom_left_area(const struct tp_dispatch *tp, - const struct tp_touch *t) - { - return is_inside_bottom_button_area(tp, t) && -+ !is_inside_bottom_middle_area(tp, t) && - !is_inside_bottom_right_area(tp, t); - } - -@@ -192,6 +203,7 @@ tp_button_none_handle_event(struct tp_dispatch *tp, - { - switch (event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_BOTTOM, event); - break; -@@ -220,6 +232,7 @@ tp_button_area_handle_event(struct tp_dispatch *tp, - { - switch (event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - case BUTTON_EVENT_IN_TOP_R: - case BUTTON_EVENT_IN_TOP_M: -@@ -243,6 +256,7 @@ tp_button_bottom_handle_event(struct tp_dispatch *tp, - { - switch (event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - if (event != t->button.curr) - tp_button_set_state(tp, -@@ -273,6 +287,7 @@ tp_button_top_handle_event(struct tp_dispatch *tp, - { - switch (event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_TOP_TO_IGNORE, event); - break; -@@ -305,6 +320,7 @@ tp_button_top_new_handle_event(struct tp_dispatch *tp, - { - switch(event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - tp_button_set_state(tp, t, BUTTON_STATE_AREA, event); - break; -@@ -355,6 +371,7 @@ tp_button_top_to_ignore_handle_event(struct tp_dispatch *tp, - event); - break; - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - case BUTTON_EVENT_IN_AREA: - break; -@@ -377,6 +394,7 @@ tp_button_ignore_handle_event(struct tp_dispatch *tp, - { - switch (event) { - case BUTTON_EVENT_IN_BOTTOM_R: -+ case BUTTON_EVENT_IN_BOTTOM_M: - case BUTTON_EVENT_IN_BOTTOM_L: - case BUTTON_EVENT_IN_TOP_R: - case BUTTON_EVENT_IN_TOP_M: -@@ -450,6 +468,8 @@ tp_button_handle_state(struct tp_dispatch *tp, uint64_t time) - - if (is_inside_bottom_right_area(tp, t)) - event = BUTTON_EVENT_IN_BOTTOM_R; -+ else if (is_inside_bottom_middle_area(tp, t)) -+ event = BUTTON_EVENT_IN_BOTTOM_M; - else if (is_inside_bottom_left_area(tp, t)) - event = BUTTON_EVENT_IN_BOTTOM_L; - else if (is_inside_top_right_area(tp, t)) -@@ -543,7 +563,14 @@ tp_init_softbuttons(struct tp_dispatch *tp, - } else { - tp->buttons.bottom_area.top_edge = height * .85 + yoffset; - } -- tp->buttons.bottom_area.rightbutton_left_edge = width/2 + xoffset; -+ -+ /* The middle button is 25% of the touchpad and centered. Many -+ * touchpads don't have markings for the middle button at all so we -+ * need to make it big enough to reliably hit it but not too big so -+ * it takes away all the space. -+ */ -+ tp->buttons.bottom_area.middlebutton_left_edge = width * 0.375 + xoffset; -+ tp->buttons.bottom_area.rightbutton_left_edge = width * 0.625 + xoffset; - } - - void -@@ -989,6 +1016,8 @@ tp_post_clickpadbutton_buttons(struct tp_dispatch *tp, uint64_t time) - break; - case BUTTON_EVENT_IN_TOP_M: - is_top = 1; -+ /* fallthrough */ -+ case BUTTON_EVENT_IN_BOTTOM_M: - area |= MIDDLE; - break; - case BUTTON_EVENT_IN_TOP_R: -diff --git a/src/evdev-mt-touchpad.h b/src/evdev-mt-touchpad.h -index 1f05a03..7277726 100644 ---- a/src/evdev-mt-touchpad.h -+++ b/src/evdev-mt-touchpad.h -@@ -70,6 +70,7 @@ enum touch_palm_state { - - enum button_event { - BUTTON_EVENT_IN_BOTTOM_R = 30, -+ BUTTON_EVENT_IN_BOTTOM_M, - BUTTON_EVENT_IN_BOTTOM_L, - BUTTON_EVENT_IN_TOP_R, - BUTTON_EVENT_IN_TOP_M, -@@ -283,6 +284,7 @@ struct tp_dispatch { - struct { - int32_t top_edge; /* in device coordinates */ - int32_t rightbutton_left_edge; /* in device coordinates */ -+ int32_t middlebutton_left_edge; /* in device coordinates */ - } bottom_area; - - struct { -diff --git a/test/touchpad-buttons.c b/test/touchpad-buttons.c -index 064c29e..080c670 100644 ---- a/test/touchpad-buttons.c -+++ b/test/touchpad-buttons.c -@@ -987,6 +987,35 @@ START_TEST(clickpad_softbutton_left) - } - END_TEST - -+START_TEST(clickpad_softbutton_middle) -+{ -+ struct litest_device *dev = litest_current_device(); -+ struct libinput *li = dev->libinput; -+ -+ litest_drain_events(li); -+ -+ litest_touch_down(dev, 0, 50, 90); -+ litest_event(dev, EV_KEY, BTN_LEFT, 1); -+ litest_event(dev, EV_SYN, SYN_REPORT, 0); -+ -+ litest_assert_button_event(li, -+ BTN_MIDDLE, -+ LIBINPUT_BUTTON_STATE_PRESSED); -+ -+ litest_event(dev, EV_KEY, BTN_LEFT, 0); -+ litest_event(dev, EV_SYN, SYN_REPORT, 0); -+ litest_touch_up(dev, 0); -+ -+ litest_assert_button_event(li, -+ BTN_MIDDLE, -+ LIBINPUT_BUTTON_STATE_RELEASED); -+ -+ libinput_dispatch(li); -+ -+ litest_assert_empty_queue(li); -+} -+END_TEST -+ - START_TEST(clickpad_softbutton_right) - { - struct litest_device *dev = litest_current_device(); -@@ -1585,6 +1614,7 @@ litest_setup_tests(void) - litest_add("touchpad:click", clickpad_finger_pin, LITEST_CLICKPAD, LITEST_ANY); - - litest_add("touchpad:softbutton", clickpad_softbutton_left, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); -+ litest_add("touchpad:softbutton", clickpad_softbutton_middle, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); - litest_add("touchpad:softbutton", clickpad_softbutton_right, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); - litest_add("touchpad:softbutton", clickpad_softbutton_left_tap_n_drag, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); - litest_add("touchpad:softbutton", clickpad_softbutton_right_tap_n_drag, LITEST_CLICKPAD, LITEST_APPLE_CLICKPAD); commit 75a1d5d9e04280e4a90a4241e3c7128ca070c70c Author: Héctor Orón Martínez <zu...@debian.org> Date: Mon May 30 13:13:20 2016 +0200 Release Debian version libinput-1.3.1-1 Signed-off-by: Héctor Orón Martínez <zu...@debian.org> diff --git a/debian/changelog b/debian/changelog index c9f7659..6b2495c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +libinput (1.3.1-1) unstable; urgency=medium + + * New upstream release. + - Fixes 'libinput is very choppy with ELAN1000 touchpads' + (Closes: #825784) + + -- Héctor Orón Martínez <zu...@debian.org> Mon, 30 May 2016 12:29:50 +0200 + libinput (1.3.0-2) unstable; urgency=medium * rules: Use --fail-missing for dh_install. commit a5fdfd7672629b22767768afca4fbe27abb81583 Author: Héctor Orón Martínez <zu...@debian.org> Date: Mon May 30 13:12:58 2016 +0200 d/control: update uploader name for myself Signed-off-by: Héctor Orón Martínez <zu...@debian.org> diff --git a/debian/control b/debian/control index 8f92ee9..0acae76 100644 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: libinput Section: libs Priority: optional Maintainer: Debian X Strike Force <debian-x@lists.debian.org> -Uploaders: Emilio Pozuelo Monfort <po...@debian.org>, Hector Oron <zu...@debian.org> +Uploaders: Emilio Pozuelo Monfort <po...@debian.org>, Héctor Orón Martínez <zu...@debian.org> Build-Depends: debhelper (>= 9), dh-autoreconf, 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