configure.ac | 10 debian/changelog | 8 debian/control | 6 debian/libinput10.symbols | 18 doc/Makefile.am | 1 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.c | 67 ++ src/evdev-mt-touchpad.h | 3 src/evdev-tablet-pad.c | 620 +++++++++++++++++++++++++++ src/evdev-tablet-pad.h | 69 +++ src/evdev-tablet.c | 53 -- src/evdev.c | 262 ++++++++--- src/evdev.h | 36 + src/libinput-private.h | 26 + src/libinput-util.h | 5 src/libinput.c | 257 +++++++++++ src/libinput.h | 342 ++++++++++++++ src/libinput.sym | 18 src/timer.c | 3 test/Makefile.am | 8 test/gestures.c | 8 test/keyboard.c | 4 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 | 270 +++++++++++ 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 | 8 51 files changed, 4392 insertions(+), 255 deletions(-)
New commits: commit 8bea6d9077d889a91d846b4c55a55c34d709783d Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue May 10 11:13:33 2016 +0300 release to unstable. diff --git a/debian/changelog b/debian/changelog index 9114f38..83388ca 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,10 +1,10 @@ -libinput (1.3.0-1) UNRELEASED; urgency=medium +libinput (1.3.0-1) unstable; urgency=medium * New upstream release. * symbols: Updated. * control: Use https vcs urls. - -- Timo Aaltonen <tjaal...@debian.org> Tue, 10 May 2016 10:55:00 +0300 + -- Timo Aaltonen <tjaal...@debian.org> Tue, 10 May 2016 11:01:43 +0300 libinput (1.2.4-1) unstable; urgency=medium commit b716343525b16f5d24523f757008abb573e4b6d6 Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue May 10 11:01:33 2016 +0300 Bump policy to 3.9.8, no changes. diff --git a/debian/changelog b/debian/changelog index a7b0a3b..9114f38 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,7 @@ libinput (1.3.0-1) UNRELEASED; urgency=medium * New upstream release. * symbols: Updated. + * control: Use https vcs urls. -- Timo Aaltonen <tjaal...@debian.org> Tue, 10 May 2016 10:55:00 +0300 diff --git a/debian/control b/debian/control index cee8a83..3639c79 100644 --- a/debian/control +++ b/debian/control @@ -11,9 +11,9 @@ Build-Depends: libudev-dev, libevdev-dev (>= 0.4), libwacom-dev (>= 0.12), -Standards-Version: 3.9.6 -Vcs-Git: git://anonscm.debian.org/pkg-xorg/lib/libinput.git -Vcs-Browser: http://anonscm.debian.org/cgit/pkg-xorg/lib/libinput.git +Standards-Version: 3.9.8 +Vcs-Git: https://anonscm.debian.org/pkg-xorg/lib/libinput.git +Vcs-Browser: https://anonscm.debian.org/cgit/pkg-xorg/lib/libinput.git Homepage: http://www.freedesktop.org/wiki/Software/libinput/ Package: libinput10 commit 69335ad5b4ec4a385503fb373cc7f89b9f8b4a36 Author: Timo Aaltonen <tjaal...@debian.org> Date: Tue May 10 11:00:54 2016 +0300 symbols: Updated. diff --git a/debian/changelog b/debian/changelog index a811683..a7b0a3b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,10 @@ +libinput (1.3.0-1) UNRELEASED; urgency=medium + + * New upstream release. + * symbols: Updated. + + -- Timo Aaltonen <tjaal...@debian.org> Tue, 10 May 2016 10:55:00 +0300 + libinput (1.2.4-1) unstable; urgency=medium * New upstream release. diff --git a/debian/libinput10.symbols b/debian/libinput10.symbols index ee42245..06b37ef 100644 --- a/debian/libinput10.symbols +++ b/debian/libinput10.symbols @@ -7,7 +7,8 @@ libinput.so.10 libinput10 #MINVER# LIBINPUT_0.20.0@LIBINPUT_0.20.0 0.21.0 LIBINPUT_0.21.0@LIBINPUT_0.21.0 0.21.0 LIBINPUT_1.1@LIBINPUT_1.1 1.1.0 - LIBINPUT_1.2@LIBINPUT_1.2 1.2.0-1 + LIBINPUT_1.2@LIBINPUT_1.2 1.2.0 + LIBINPUT_1.3@LIBINPUT_1.3 1.3.0 libinput_config_status_to_str@LIBINPUT_0.12.0 0.15.0 libinput_device_config_accel_get_default_profile@LIBINPUT_1.1 1.1.0 libinput_device_config_accel_get_default_speed@LIBINPUT_0.12.0 0.15.0 @@ -84,6 +85,9 @@ libinput.so.10 libinput10 #MINVER# libinput_device_ref@LIBINPUT_0.12.0 0.15.0 libinput_device_set_seat_logical_name@LIBINPUT_0.12.0 0.15.0 libinput_device_set_user_data@LIBINPUT_0.12.0 0.15.0 + libinput_device_tablet_pad_get_num_buttons@LIBINPUT_1.3 1.3.0 + libinput_device_tablet_pad_get_num_rings@LIBINPUT_1.3 1.3.0 + libinput_device_tablet_pad_get_num_strips@LIBINPUT_1.3 1.3.0 libinput_device_unref@LIBINPUT_0.12.0 0.15.0 libinput_dispatch@LIBINPUT_0.12.0 0.15.0 libinput_event_destroy@LIBINPUT_0.12.0 0.15.0 @@ -105,6 +109,7 @@ libinput.so.10 libinput10 #MINVER# libinput_event_get_gesture_event@LIBINPUT_0.20.0 0.21.0 libinput_event_get_keyboard_event@LIBINPUT_0.12.0 0.15.0 libinput_event_get_pointer_event@LIBINPUT_0.12.0 0.15.0 + libinput_event_get_tablet_pad_event@LIBINPUT_1.3 1.3.0 libinput_event_get_tablet_tool_event@LIBINPUT_1.2 1.2.0 libinput_event_get_touch_event@LIBINPUT_0.12.0 0.15.0 libinput_event_get_type@LIBINPUT_0.12.0 0.15.0 @@ -132,6 +137,17 @@ libinput.so.10 libinput10 #MINVER# libinput_event_pointer_get_time@LIBINPUT_0.12.0 0.15.0 libinput_event_pointer_get_time_usec@LIBINPUT_0.21.0 0.21.0 libinput_event_pointer_has_axis@LIBINPUT_0.12.0 0.15.0 + libinput_event_tablet_pad_get_base_event@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_button_number@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_button_state@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_ring_number@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_ring_position@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_ring_source@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_strip_number@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_strip_position@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_strip_source@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_time@LIBINPUT_1.3 1.3.0 + libinput_event_tablet_pad_get_time_usec@LIBINPUT_1.3 1.3.0 libinput_event_tablet_tool_distance_has_changed@LIBINPUT_1.2 1.2.0 libinput_event_tablet_tool_get_base_event@LIBINPUT_1.2 1.2.0 libinput_event_tablet_tool_get_button@LIBINPUT_1.2 1.2.0 commit dfd9517f5a17001ed4e13c41d16fe935d2b190db Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 10 13:53:24 2016 +1000 configure.ac: libinput 1.3.0 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index df53289..a44d84c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,8 @@ AC_PREREQ([2.64]) m4_define([libinput_major_version], [1]) -m4_define([libinput_minor_version], [2]) -m4_define([libinput_micro_version], [903]) +m4_define([libinput_minor_version], [3]) +m4_define([libinput_micro_version], [0]) 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:2:8 +LIBINPUT_LT_VERSION=18:3:8 AC_SUBST(LIBINPUT_LT_VERSION) AM_SILENT_RULES([yes]) commit 87550f8dc97c0339d7339124477e736b13837c68 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Mon May 9 11:13:55 2016 +1000 doc: add an entry about tablets in left-handed mode Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/doc/svg/tablet-left-handed.svg b/doc/svg/tablet-left-handed.svg new file mode 100644 index 0000000..ff73fd9 --- /dev/null +++ b/doc/svg/tablet-left-handed.svg @@ -0,0 +1,469 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="251.43713mm" + height="65.496956mm" + viewBox="0 0 890.91894 232.07583" + id="svg2" + version="1.1" + inkscape:version="0.91 r13725" + sodipodi:docname="tablet-left-handed.svg"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="marker5778" + style="overflow:visible" + inkscape:isstock="true"> + <path + id="path5780" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker5774" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path5776" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:isstock="true" + style="overflow:visible" + id="marker5732" + refX="0" + refY="0" + orient="auto" + inkscape:stockid="Arrow1Lend" + inkscape:collect="always"> + <path + transform="matrix(-0.8,0,0,-0.8,-10,0)" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + id="path5734" + inkscape:connector-curvature="0" /> + </marker> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible" + inkscape:isstock="true" + inkscape:collect="always"> + <path + id="path5471" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1" + transform="matrix(-0.8,0,0,-0.8,-10,0)" + inkscape:connector-curvature="0" /> + </marker> + <linearGradient + inkscape:collect="always" + id="linearGradient4294"> + <stop + style="stop-color:#1a1a1a;stop-opacity:1;" + offset="0" + id="stop4296" /> + <stop + style="stop-color:#808080;stop-opacity:1" + offset="1" + id="stop4298" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4294" + id="linearGradient4300" + x1="465.81339" + y1="666.13727" + x2="454.82117" + y2="658.65521" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient4294" + id="linearGradient5445" + gradientUnits="userSpaceOnUse" + x1="465.81339" + y1="666.13727" + x2="454.82117" + y2="658.65521" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4" + inkscape:cx="395.90581" + inkscape:cy="178.07552" + inkscape:document-units="px" + inkscape:current-layer="layer3" + showgrid="false" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1920" + inkscape:window-height="1016" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0"> + <sodipodi:guide + position="127.77902,266.16995" + orientation="0,1" + id="guide4164" /> + <sodipodi:guide + position="125.25364,38.38054" + orientation="0,1" + id="guide4166" /> + </sodipodi:namedview> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="tablet" + inkscape:groupmode="layer" + id="layer1" + style="display:inline" + transform="translate(-75.261626,-208.63373)" /> + <g + inkscape:groupmode="layer" + id="layer3" + inkscape:label="stylus" + style="display:inline" + transform="translate(-75.261626,-208.63373)"> + <g + id="g5394" + transform="matrix(0.75576066,0,0,0.75576066,18.38185,107.63861)"> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g4309" + style="display:inline"> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:1.05118144;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:4.20472551, 1.05118138;stroke-dashoffset:0;stroke-opacity:1" + id="rect4136" + width="522.19733" + height="306.02466" + x="75.787216" + y="134.15933" /> + <rect + y="175.42407" + x="199.33878" + height="226.52563" + width="357.34042" + id="rect4140" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.74813837;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:2.99255325, 0.74813831;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect4142" + width="65" + height="22.142857" + x="103.10225" + y="175.72914" /> + <rect + y="203.72914" + x="103.10225" + height="22.142857" + width="65" + id="rect4148" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect4150" + width="65" + height="22.142857" + x="103.10225" + y="231.72913" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect4154" + width="65" + height="22.142857" + x="103.10225" + y="323.72913" /> + <rect + y="351.72913" + x="103.10225" + height="22.142857" + width="65" + id="rect4156" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" /> + <circle + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="path4158" + cx="135.61298" + cy="287.06125" + r="22.98097" /> + <ellipse + cy="287.06125" + cx="135.61298" + id="circle4160" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.52043104;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:2.08172421, 0.52043105;stroke-dashoffset:0;stroke-opacity:1" + rx="11.5985" + ry="12.608653" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect4162" + width="65" + height="22.142857" + x="103.10225" + y="379.72913" /> + </g> + <g + transform="matrix(0.37129971,0.09948946,-0.09618892,0.35898192,295.60339,7.6883643)" + id="g4304"> + <path + style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 387.83544,799.76093 c -1.1128,3.61694 -3.2211,13.05163 -1.08543,14.07769 2.13567,1.02606 7.81039,-3.72162 10.99756,-6.69095 z" + id="path4286" + inkscape:connector-curvature="0" + sodipodi:nodetypes="czcc" /> + <path + style="display:inline;fill:#000000" + d="m 392.64431,804.79039 c -8.52094,-5.90399 -8.49394,-11.01546 0.22879,-43.30647 1.03999,-3.85 2.46829,-9.67602 3.17399,-12.9467 0.99731,-4.62219 2.39455,-7.29497 6.27321,-12 2.74456,-3.32932 5.25157,-6.2783 5.57113,-6.5533 40.78433,-60.97488 80.48307,-125.1652 118.27253,-184 9.86283,-15.675 26.59424,-42.225 37.18089,-59 10.58666,-16.775 34.01422,-53.9 52.06125,-82.5 18.04703,-28.6 35.04505,-55.31677 37.77338,-59.37059 l 4.9606,-7.3706 4.1828,0.57332 c 4.16371,0.5707 4.19706,0.54958 7.30887,-4.62941 3.75631,-6.2516 8.82067,-11.57582 12.2516,-12.88026 5.99391,-2.27888 14.03303,2.9506 14.03303,9.12854 0,3.90203 -2.51704,10.62127 -6.02878,16.09385 -1.63417,2.54664 -2.97122,4.85949 -2.97122,5.13969 0,0.28019 0.9,1.54715 2,2.81546 2.28453,2.63408 2.47267,4.21918 0.86833,7.31574 -1.28218,2.47476 -26.61383,45.18798 -55.85724,94.18426 -10.83283,18.15 -25.72943,43.1137 -33.10357,55.47489 -7.37413,12.3612 -13.69273,23.17153 -14.04131,24.02297 -0.34859,0.85144 -7.50972,12.78774 -15 .91363,26.52511 -15.54138,25.40455 -32.24417,52.9052 -70.74345,116.47703 -40.26028,66.47968 -43.66308,72.46026 -49.21634,86.5 -1.74036,4.4 -3.92035,8.675 -4.8444,9.5 -0.92405,0.825 -4.36246,3.75 -7.6409,6.5 -3.27845,2.75 -9.57132,8.3067 -13.98415,12.34823 -10.62726,9.73304 -16.99729,13.87361 -22.52334,14.64034 -3.99187,0.55386 -5.03885,0.251 -9.27207,-2.6821 z" + id="path4283" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssssccssscsssssssssssssssssss" /> + <path + style="fill:url(#linearGradient4300);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 450.89044,688.88586 c 8.71518,5.62513 45.74035,-59.18436 43.57923,-75.43494 l -7.07107,-6.56599 c -29.93081,25.86352 -47.78438,74.72281 -47.78438,74.72281 0,0 0,0 11.27622,7.27812 z" + id="path4292" + inkscape:connector-curvature="0" + sodipodi:nodetypes="scccs" /> + </g> + </g> + <g + inkscape:export-ydpi="90" + inkscape:export-xdpi="90" + id="g5413" + style="display:inline" + transform="matrix(-0.75576066,0,0,-0.75576066,1023.0604,541.7047)"> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:1.05118144;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:4.20472551, 1.05118138;stroke-dashoffset:0;stroke-opacity:1" + id="rect5415" + width="522.19733" + height="306.02466" + x="75.787216" + y="134.15933" /> + <rect + y="175.42407" + x="199.33878" + height="226.52563" + width="357.34042" + id="rect5417" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.74813837;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:2.99255325, 0.74813831;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect5419" + width="65" + height="22.142857" + x="103.10225" + y="175.72914" /> + <rect + y="203.72914" + x="103.10225" + height="22.142857" + width="65" + id="rect5421" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect5423" + width="65" + height="22.142857" + x="103.10225" + y="231.72913" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect5425" + width="65" + height="22.142857" + x="103.10225" + y="323.72913" /> + <rect + y="351.72913" + x="103.10225" + height="22.142857" + width="65" + id="rect5427" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" /> + <circle + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="circle5429" + cx="135.61298" + cy="287.06125" + r="22.98097" /> + <ellipse + cy="287.06125" + cx="135.61298" + id="ellipse5431" + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.52043104;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:2.08172421, 0.52043105;stroke-dashoffset:0;stroke-opacity:1" + rx="11.5985" + ry="12.608653" /> + <rect + style="opacity:0.92000002;fill:#4d4d4d;fill-opacity:1;stroke:#4d4d4d;stroke-width:0.98900002;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:3.956, 0.989;stroke-dashoffset:0;stroke-opacity:1" + id="rect5433" + width="65" + height="22.142857" + x="103.10225" + y="379.72913" /> + </g> + <g + transform="matrix(0.28061371,0.07519022,-0.0726958,0.27130441,737.25564,113.44918)" + id="g5435"> + <path + style="display:inline;fill:#cccccc;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 387.83544,799.76093 c -1.1128,3.61694 -3.2211,13.05163 -1.08543,14.07769 2.13567,1.02606 7.81039,-3.72162 10.99756,-6.69095 z" + id="path5437" + inkscape:connector-curvature="0" + sodipodi:nodetypes="czcc" /> + <path + style="display:inline;fill:#000000" + d="m 392.64431,804.79039 c -8.52094,-5.90399 -8.49394,-11.01546 0.22879,-43.30647 1.03999,-3.85 2.46829,-9.67602 3.17399,-12.9467 0.99731,-4.62219 2.39455,-7.29497 6.27321,-12 2.74456,-3.32932 5.25157,-6.2783 5.57113,-6.5533 40.78433,-60.97488 80.48307,-125.1652 118.27253,-184 9.86283,-15.675 26.59424,-42.225 37.18089,-59 10.58666,-16.775 34.01422,-53.9 52.06125,-82.5 18.04703,-28.6 35.04505,-55.31677 37.77338,-59.37059 l 4.9606,-7.3706 4.1828,0.57332 c 4.16371,0.5707 4.19706,0.54958 7.30887,-4.62941 3.75631,-6.2516 8.82067,-11.57582 12.2516,-12.88026 5.99391,-2.27888 14.03303,2.9506 14.03303,9.12854 0,3.90203 -2.51704,10.62127 -6.02878,16.09385 -1.63417,2.54664 -2.97122,4.85949 -2.97122,5.13969 0,0.28019 0.9,1.54715 2,2.81546 2.28453,2.63408 2.47267,4.21918 0.86833,7.31574 -1.28218,2.47476 -26.61383,45.18798 -55.85724,94.18426 -10.83283,18.15 -25.72943,43.1137 -33.10357,55.47489 -7.37413,12.3612 -13.69273,23.17153 -14.04131,24.02297 -0.34859,0.85144 -7.50972,12.78774 -15.9 1363,26.52511 -15.54138,25.40455 -32.24417,52.9052 -70.74345,116.47703 -40.26028,66.47968 -43.66308,72.46026 -49.21634,86.5 -1.74036,4.4 -3.92035,8.675 -4.8444,9.5 -0.92405,0.825 -4.36246,3.75 -7.6409,6.5 -3.27845,2.75 -9.57132,8.3067 -13.98415,12.34823 -10.62726,9.73304 -16.99729,13.87361 -22.52334,14.64034 -3.99187,0.55386 -5.03885,0.251 -9.27207,-2.6821 z" + id="path5439" + inkscape:connector-curvature="0" + sodipodi:nodetypes="ssssccssscsssssssssssssssssss" /> + <path + style="fill:url(#linearGradient5445);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 450.89044,688.88586 c 8.71518,5.62513 45.74035,-59.18436 43.57923,-75.43494 l -7.07107,-6.56599 c -29.93081,25.86352 -47.78438,74.72281 -47.78438,74.72281 0,0 0,0 11.27622,7.27812 z" + id="path5441" + inkscape:connector-curvature="0" + sodipodi:nodetypes="scccs" /> + </g> + <g + id="g5742" + transform="matrix(0.75576066,0,0,0.75576066,18.38185,107.63861)"> + <path + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5732)" + d="m 198.52376,174.60605 173.3128,0" + id="path5730" + inkscape:connector-curvature="0" /> + <path + inkscape:connector-curvature="0" + id="path5462" + d="m 199.04066,174.53964 0,173.3128" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" /> + </g> + <g + style="display:inline" + id="g5746" + transform="matrix(0.75576066,0,0,0.75576066,452.18847,107.63861)"> + <path + inkscape:connector-curvature="0" + id="path5748" + d="m 198.52376,174.60605 173.3128,0" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5732)" /> + <path + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" + d="m 199.04066,174.53964 0,173.3128" + id="path5750" + inkscape:connector-curvature="0" /> + </g> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:13.22581196px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="152.45718" + y="228.55676" + id="text5758" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan5760" + x="152.45718" + y="228.55676" + style="fill:#ff0000">origin</tspan></text> + <text + sodipodi:linespacing="125%" + id="text5762" + y="228.55676" + x="587.55939" + style="font-style:normal;font-weight:normal;font-size:13.22581196px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="fill:#ff0000" + y="228.55676" + x="587.55939" + id="tspan5764" + sodipodi:role="line">origin</tspan></text> + <g + id="g5786" + transform="matrix(0.75576066,0,0,0.75576066,18.366504,109.15014)"> + <path + sodipodi:nodetypes="cc" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5774)" + d="m 135.40105,167.16145 0,93.31279" + id="path5770" + inkscape:connector-curvature="0" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="116.75471" + y="156.13232" + id="text5782" + sodipodi:linespacing="125%"><tspan + sodipodi:role="line" + id="tspan5784" + x="116.75471" + y="156.13232" + style="fill:#ff0000">zero</tspan></text> + </g> + <g + transform="matrix(0.75576066,0,0,0.75576066,817.96129,109.15014)" + id="g5791"> + <path + inkscape:connector-curvature="0" + id="path5793" + d="m 135.40105,167.16145 0,93.31279" + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker5774)" + sodipodi:nodetypes="cc" /> + <text + sodipodi:linespacing="125%" + id="text5795" + y="156.13232" + x="116.75471" + style="font-style:normal;font-weight:normal;font-size:17.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="fill:#ff0000" + y="156.13232" + x="116.75471" + id="tspan5797" + sodipodi:role="line">zero</tspan></text> + </g> + </g> +</svg> diff --git a/doc/tablet-support.dox b/doc/tablet-support.dox index 0a44010..c555cea 100644 --- a/doc/tablet-support.dox +++ b/doc/tablet-support.dox @@ -245,4 +245,35 @@ caller and libinput does not provide specific handling. Callers should use external sources like libwacom to identify which buttons have semantic behaviors. +@section tablet-left-handed Tablets in left-handed mode + +Left-handed mode on tablet devices usually means rotating the physical +tablet by 180 degrees to move the tablet pad button area to right side of +the tablet. When left-handed mode is enabled on a tablet device (see +libinput_device_config_left_handed_set()) the tablet tool and tablet pad +behavior changes. In left-handed mode, the tools' axes are adjusted +so that the origin of each axis remains the logical north-east of +the physical tablet. For example, the x and y axes are inverted and the +positive x/y coordinates are down/right of the top-left corner of the tablet +in its current orientation. On a tablet pad, the ring and strip are +similarly adjusted. The origin of the ring and strips remain the top-most +point. + +@image html tablet-left-handed.svg "Tablet axes in right- and left-handed mode" + +Pad buttons are not affected by left-handed mode; the number of each button +remains the same even when the perceived physical location of the button +changes. This is a conscious design decision: +- Tablet pad buttons do not have intrinsic semantic meanings. Re-ordering + the button numbers would not change any functionality. +- Button numbers should not be exposed directly to the user but handled in + the intermediate layers. Re-ordering button numbers thus has no + user-visible effect. +- Re-ordering button numbers may complicate the intermediate layers. + +Left-handed mode is only available on some tablets, some tablets are +symmetric and thus do not support left-handed mode. libinput requires +libwacom to determine if a tablet is capable of being switched to +left-handed mode. + */ commit 3ff302694ee3ee98e370fccb2a4ad1a70a148a7f Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Wed May 4 19:15:39 2016 +1000 configure.ac: libinput 1.3rc3 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index 8c5b257..df53289 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], [2]) -m4_define([libinput_micro_version], [902]) +m4_define([libinput_micro_version], [903]) 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:1:8 +LIBINPUT_LT_VERSION=18:2:8 AC_SUBST(LIBINPUT_LT_VERSION) AM_SILENT_RULES([yes]) commit cbb95cf56ef6250f88371fbd78107b5d9a18f212 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 3 14:14:04 2016 +1000 test: add a missing empty line Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/test/trackpoint.c b/test/trackpoint.c index 5a68b19..4098f6f 100644 --- a/test/trackpoint.c +++ b/test/trackpoint.c @@ -279,6 +279,7 @@ START_TEST(trackpoint_topsoftbuttons_left_handed_both) litest_delete_device(trackpoint); } END_TEST + void litest_setup_tests(void) { commit d8e92b3e45a0b0b222e1ee5ace161b569acebd57 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 3 14:10:51 2016 +1000 evdev: log the applied model flags in debug mode Makes it a lot easier to figure out if the udev properties are set up correctly. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/evdev.c b/src/evdev.c index afc4710..bcd9c5b 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -1741,8 +1741,13 @@ evdev_read_model_flags(struct evdev_device *device) while (m->property) { if (!!udev_device_get_property_value(device->udev_device, - m->property)) + m->property)) { + log_debug(device->base.seat->libinput, + "%s: tagged as %s\n", + evdev_device_get_sysname(device), + m->property); model_flags |= m->model; + } m++; } commit dc7570f047d5e9be8cbec65672b4a2512c3811b3 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 3 13:44:04 2016 +1000 Constify two matrix multiplication helpers Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/libinput-util.h b/src/libinput-util.h index 8f814cc..82ab2b1 100644 --- a/src/libinput-util.h +++ b/src/libinput-util.h @@ -228,7 +228,7 @@ matrix_init_translate(struct matrix *m, float x, float y) } static inline int -matrix_is_identity(struct matrix *m) +matrix_is_identity(const struct matrix *m) { return (m->val[0][0] == 1 && m->val[0][1] == 0 && @@ -263,7 +263,7 @@ matrix_mult(struct matrix *dest, } static inline void -matrix_mult_vec(struct matrix *m, int *x, int *y) +matrix_mult_vec(const struct matrix *m, int *x, int *y) { int tx, ty; commit df42e9aebc4ae53fa9306d7fbbc316991c1aa44c Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 3 09:08:25 2016 +1000 doc: add an overview of the various configuration options It's a bit hard to find what can be configured in the wall of text that is the doxygen output. Add a TOC of the various options so it's easy to get a quick grasp. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/libinput.h b/src/libinput.h index cedcabf..a93676e 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -3309,10 +3309,36 @@ libinput_device_group_get_user_data(struct libinput_device_group *group); * configuration. This default can be obtained with the respective * get_default call. * + * Configuration options are device dependent and not all options are + * supported on all devices. For all configuration options, libinput + * provides a call to check if a configuration option is available on a + * device (e.g. libinput_device_config_calibration_has_matrix()) + * * Some configuration option may be dependent on or mutually exclusive with * with other options. The behavior in those cases is * implementation-dependent, the caller must ensure that the options are set * in the right order. + * + * Below is a general grouping of configuration options according to device + * type. Note that this is a guide only and not indicative of any specific + * device. + * - Touchpad: + * - libinput_device_config_tap_set_enabled() + * - libinput_device_config_tap_set_drag_enabled() + * - libinput_device_config_tap_set_drag_lock_enabled() + * - libinput_device_config_click_set_method() + * - libinput_device_config_scroll_set_method() + * - libinput_device_config_dwt_set_enabled() + * - Touchscreens: + * - libinput_device_config_calibration_set_matrix() + * - Pointer devices (mice, trackballs, touchpads): + * - libinput_device_config_accel_set_speed() + * - libinput_device_config_accel_set_profile() + * - libinput_device_config_scroll_set_natural_scroll_enabled() + * - libinput_device_config_left_handed_set() + * - libinput_device_config_middle_emulation_set_enabled() + * - All devices: + * - libinput_device_config_send_events_set_mode() */ /** commit b94b40206b83d09871c7b2c6877bc7cb812f3c7d Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue May 3 08:49:12 2016 +1000 doc: add missing @ingroup tag to the accel profile enum Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/src/libinput.h b/src/libinput.h index 97fd570..cedcabf 100644 --- a/src/libinput.h +++ b/src/libinput.h @@ -3871,6 +3871,9 @@ libinput_device_config_accel_get_speed(struct libinput_device *device); double libinput_device_config_accel_get_default_speed(struct libinput_device *device); +/** + * @ingroup config + */ enum libinput_config_accel_profile { /** * Placeholder for devices that don't have a configurable pointer commit 6a22eed4efa2a18664d62c6d8131c05258f869ab Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue Sep 16 15:13:00 2014 +1000 touchpad: detect and warn about kernel tracking pointer jumps If a touch moves by more than 20mm within a single frame, reset the motion history, effectively discarding the movement. This is a relatively common bug and almost always needs a kernel fix, so add an explanatory page to the docs. Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> Reviewed-by: Benjamin Tissoires <benjamin.tissoi...@gmail.com> Reviewed-by: Hans de Goede <hdego...@redhat.com> diff --git a/doc/Makefile.am b/doc/Makefile.am index 7a7c6cf..f56ed6a 100644 --- a/doc/Makefile.am +++ b/doc/Makefile.am @@ -27,6 +27,7 @@ header_files = \ $(srcdir)/tapping.dox \ $(srcdir)/test-suite.dox \ $(srcdir)/tools.dox \ + $(srcdir)/touchpad-jumping-cursors.dox \ $(srcdir)/touchpads.dox diagram_files = \ diff --git a/doc/page-hierarchy.dox b/doc/page-hierarchy.dox index 1351a5e..e47e98e 100644 --- a/doc/page-hierarchy.dox +++ b/doc/page-hierarchy.dox @@ -7,6 +7,7 @@ - @subpage gestures - @subpage palm_detection - @subpage t440_support +- @subpage touchpad_jumping_cursor @page touchscreens Touchscreens diff --git a/doc/touchpad-jumping-cursors.dox b/doc/touchpad-jumping-cursors.dox new file mode 100644 index 0000000..e581eb1 --- /dev/null +++ b/doc/touchpad-jumping-cursors.dox @@ -0,0 +1,54 @@ +/** +@page touchpad_jumping_cursor Touchpad jumping cursor bugs + +A common bug encountered on touchpads is a cursor jump when alternating +between fingers on a multi-touch-capable touchpad. For example, after moving +the cursor a user may use a second finger in the software button area to +physically click the touchpad. Upon setting the finger down, the cursor +exhibits a jump towards the bottom left or right, depending on the finger +position. + +When libinput detects a cursor jump it prints a bug warning to the log with +the text <b>"Touch jump detected and discarded."</b> and a link to this page. + +In most cases, this is a bug in the kernel driver and to libinput it appears +that the touch point moves from its previous position. The pointer jump can +usually be seen in the evemu-record output for the device: + +<pre> + E: 249.206319 0000 0000 0000 # ------------ SYN_REPORT (0) ---------- + E: 249.218008 0003 0035 3764 # EV_ABS / ABS_MT_POSITION_X 3764 + E: 249.218008 0003 0036 2221 # EV_ABS / ABS_MT_POSITION_Y 2221 + E: 249.218008 0003 003a 0065 # EV_ABS / ABS_MT_PRESSURE 65