Hi, This diff updates xf86-input-synaptics to the latest release. Tested on amd64.
Comments ? OK ? -- Alexandr Shadchin Index: ChangeLog =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/ChangeLog,v retrieving revision 1.9 diff -u -p -r1.9 ChangeLog --- ChangeLog 24 Jan 2015 17:43:59 -0000 1.9 +++ ChangeLog 29 Mar 2015 11:26:05 -0000 @@ -1,3 +1,70 @@ +commit 6f8d4bac14ac8f3fd2714f0a8a9e37c5136a4013 +Author: Peter Hutterer <[email protected]> +Date: Fri Mar 27 11:26:55 2015 +1000 + + synaptics 1.8.2 + + Signed-off-by: Peter Hutterer <[email protected]> + +commit 15caf2b53407379f8e677d48a022f4b46b97d83a +Author: Peter Hutterer <[email protected]> +Date: Tue Mar 24 15:41:39 2015 +1000 + + eventcomm: ignore fake and broken MT devices + + An MT device without X/Y is not a touchpad. And neither are fake MT devices. + + Signed-off-by: Peter Hutterer <[email protected]> + Reviewed-by: Hans de Goede <[email protected]> + (cherry picked from commit fc9f490a2c87e6f87b0f483cd6bf5f526dddbb8d) + +commit ef8daaf696584f7c1d3e9f192de18b5b9f923bdc +Author: Peter Hutterer <[email protected]> +Date: Mon Mar 23 11:38:15 2015 +1000 + + eventcomm: prevent possibly division by zero + + This came up as a kernel bug, but it's valid to create uinput devices with a + min == max range for x/y. Technically valid, but effectively useless, so catch + it, complain and hobble on along. + + Signed-off-by: Peter Hutterer <[email protected]> + Reviewed-by: Hans de Goede <[email protected]> + (cherry picked from commit 30866b97be6939b895327b930154ef758eed7ff8) + +commit 90c6d7fc60f3db1bd9db1c7702062fcaef3b3352 +Author: Gabriele Mazzotta <[email protected]> +Date: Thu Jan 15 22:04:17 2015 +0100 + + Add a delay between the second button down-up event of double taps + + Some applications ignore the second tap of double taps because of the + lack of a delay between the button down and button up events. + + Prevent this by replacing the transition from TS_2B to TS_START with a + transition from TS_2B to TS_SINGLETAP that emits only a button down + event. The button up event will be emitted when transitioning from + TS_SINGLETAP to TS_START. + + In addition, decrease the default value of MaxDoubleTapTime from 180 ms + to 100 ms in order to make double taps faster. + + Signed-off-by: Gabriele Mazzotta <[email protected]> + Signed-off-by: Peter Hutterer <[email protected]> + (cherry picked from commit 37d34f0356cc556dd8a49ec5d1ed64d49417a9b2) + +commit 649b77f0ce617fd1ec073b281636e304e80b56c0 +Author: Gabriele Mazzotta <[email protected]> +Date: Thu Jan 15 22:04:16 2015 +0100 + + Update machine state diagram + + The diagram didn't entirely reflect the current state of the code. + + Signed-off-by: Gabriele Mazzotta <[email protected]> + Signed-off-by: Peter Hutterer <[email protected]> + (cherry picked from commit a357647d3fb918b94efbda98138fb0240a949ef2) + commit d50c4bab8ae2836a0f38b29a5d22be2e950e4d08 Author: Peter Hutterer <[email protected]> Date: Thu Sep 18 07:40:13 2014 +1000 Index: Makefile.in =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/Makefile.in,v retrieving revision 1.10 diff -u -p -r1.10 Makefile.in --- Makefile.in 15 Jan 2015 01:30:40 -0000 1.10 +++ Makefile.in 29 Mar 2015 11:26:05 -0000 @@ -74,8 +74,8 @@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(srcdir)/xorg-synaptics.pc.in $(top_srcdir)/configure COPYING \ - ChangeLog INSTALL config.guess config.sub depcomp install-sh \ - ltmain.sh missing + ChangeLog INSTALL compile config.guess config.sub depcomp \ + install-sh ltmain.sh missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ Index: compile =================================================================== RCS file: compile diff -N compile --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ compile 29 Mar 2015 11:26:05 -0000 @@ -0,0 +1,347 @@ +#! /bin/sh +# Wrapper for compilers which do not understand '-c -o'. + +scriptversion=2012-10-14.11; # UTC + +# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Written by Tom Tromey <[email protected]>. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to <[email protected]> or send patches to +# <[email protected]>. + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_cl_dashL linkdir +# Make cl look for libraries in LINKDIR +func_cl_dashL () +{ + func_file_conv "$1" + if test -z "$lib_path"; then + lib_path=$file + else + lib_path="$lib_path;$file" + fi + linker_opts="$linker_opts -LIBPATH:$file" +} + +# func_cl_dashl library +# Do a library search-path lookup for cl +func_cl_dashl () +{ + lib=$1 + found=no + save_IFS=$IFS + IFS=';' + for dir in $lib_path $LIB + do + IFS=$save_IFS + if $shared && test -f "$dir/$lib.dll.lib"; then + found=yes + lib=$dir/$lib.dll.lib + break + fi + if test -f "$dir/$lib.lib"; then + found=yes + lib=$dir/$lib.lib + break + fi + if test -f "$dir/lib$lib.a"; then + found=yes + lib=$dir/lib$lib.a + break + fi + done + IFS=$save_IFS + + if test "$found" != yes; then + lib=$lib.lib + fi +} + +# func_cl_wrapper cl arg... +# Adjust compile command to suit cl +func_cl_wrapper () +{ + # Assume a capable shell + lib_path= + shared=: + linker_opts= + for arg + do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + eat=1 + case $2 in + *.o | *.[oO][bB][jJ]) + func_file_conv "$2" + set x "$@" -Fo"$file" + shift + ;; + *) + func_file_conv "$2" + set x "$@" -Fe"$file" + shift + ;; + esac + ;; + -I) + eat=1 + func_file_conv "$2" mingw + set x "$@" -I"$file" + shift + ;; + -I*) + func_file_conv "${1#-I}" mingw + set x "$@" -I"$file" + shift + ;; + -l) + eat=1 + func_cl_dashl "$2" + set x "$@" "$lib" + shift + ;; + -l*) + func_cl_dashl "${1#-l}" + set x "$@" "$lib" + shift + ;; + -L) + eat=1 + func_cl_dashL "$2" + ;; + -L*) + func_cl_dashL "${1#-L}" + ;; + -static) + shared=false + ;; + -Wl,*) + arg=${1#-Wl,} + save_ifs="$IFS"; IFS=',' + for flag in $arg; do + IFS="$save_ifs" + linker_opts="$linker_opts $flag" + done + IFS="$save_ifs" + ;; + -Xlinker) + eat=1 + linker_opts="$linker_opts $2" + ;; + -*) + set x "$@" "$1" + shift + ;; + *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) + func_file_conv "$1" + set x "$@" -Tp"$file" + shift + ;; + *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) + func_file_conv "$1" mingw + set x "$@" "$file" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift + done + if test -n "$linker_opts"; then + linker_opts="-link$linker_opts" + fi + exec "$@" $linker_opts + exit 1 +} + +eat= + +case $1 in + '') + echo "$0: No command. Try '$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand '-c -o'. +Remove '-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file 'INSTALL'. + +Report bugs to <[email protected]>. +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; +esac + +ofile= +cfile= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as 'compile cc -o foo foo.c'. + # So we strip '-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no '-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # '.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` + +# Create the lock directory. +# Note: use '[/\\:.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + test "$cofile" = "$ofile" || mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: Index: configure =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/configure,v retrieving revision 1.10 diff -u -p -r1.10 configure --- configure 24 Jan 2015 17:43:59 -0000 1.10 +++ configure 29 Mar 2015 11:26:09 -0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-input-synaptics 1.8.1. +# Generated by GNU Autoconf 2.69 for xf86-input-synaptics 1.8.2. # # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='xf86-input-synaptics' PACKAGE_TARNAME='xf86-input-synaptics' -PACKAGE_VERSION='1.8.1' -PACKAGE_STRING='xf86-input-synaptics 1.8.1' +PACKAGE_VERSION='1.8.2' +PACKAGE_STRING='xf86-input-synaptics 1.8.2' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' @@ -1378,7 +1378,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xf86-input-synaptics 1.8.1 to adapt to many kinds of systems. +\`configure' configures xf86-input-synaptics 1.8.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1449,7 +1449,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-input-synaptics 1.8.1:";; + short | recursive ) echo "Configuration of xf86-input-synaptics 1.8.2:";; esac cat <<\_ACEOF @@ -1586,7 +1586,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-input-synaptics configure 1.8.1 +xf86-input-synaptics configure 1.8.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1910,7 +1910,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-input-synaptics $as_me 1.8.1, which was +It was created by xf86-input-synaptics $as_me 1.8.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2739,7 +2739,7 @@ fi # Define the identity of the package. PACKAGE='xf86-input-synaptics' - VERSION='1.8.1' + VERSION='1.8.2' cat >>confdefs.h <<_ACEOF @@ -18820,7 +18820,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_wri # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-input-synaptics $as_me 1.8.1, which was +This file was extended by xf86-input-synaptics $as_me 1.8.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18886,7 +18886,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xf86-input-synaptics config.status 1.8.1 +xf86-input-synaptics config.status 1.8.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Index: configure.ac =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/configure.ac,v retrieving revision 1.10 diff -u -p -r1.10 configure.ac --- configure.ac 24 Jan 2015 17:43:59 -0000 1.10 +++ configure.ac 29 Mar 2015 11:26:09 -0000 @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-input-synaptics], - [1.8.1], + [1.8.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-input-synaptics]) AC_CONFIG_SRCDIR([Makefile.am]) Index: src/eventcomm.c =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/eventcomm.c,v retrieving revision 1.10 diff -u -p -r1.10 eventcomm.c --- src/eventcomm.c 24 Jan 2015 17:43:59 -0000 1.10 +++ src/eventcomm.c 29 Mar 2015 11:26:09 -0000 @@ -320,6 +320,15 @@ event_query_is_touchpad(struct libevdev libevdev_has_event_code(evdev, EV_ABS, BTN_TOOL_PEN)) /* Don't match wacom tablets */ goto unwind; + if (libevdev_has_event_code(evdev, EV_ABS, ABS_MT_SLOT)) { + if (libevdev_get_num_slots(evdev) == -1) + goto unwind; /* Ignore fake MT devices */ + + if (!libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_X) || + !libevdev_has_event_code(evdev, EV_ABS, ABS_MT_POSITION_Y)) + goto unwind; + } + ret = TRUE; unwind: @@ -437,6 +446,11 @@ event_query_axis_ranges(InputInfoPtr pIn event_get_abs(proto_data->evdev, ABS_Y, &priv->miny, &priv->maxy, &priv->synpara.hyst_y, &priv->resy); + if (priv->minx == priv->maxx || priv->miny == priv->maxy) { + xf86IDrvMsg(pInfo, X_ERROR, "Kernel bug: min == max on ABS_X/Y\n"); + return; + } + priv->has_pressure = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_PRESSURE); priv->has_width = libevdev_has_event_code(proto_data->evdev, EV_ABS, ABS_TOOL_WIDTH); @@ -458,6 +472,11 @@ event_query_axis_ranges(InputInfoPtr pIn &priv->maxx, &priv->synpara.hyst_x, &priv->resx); event_get_abs(proto_data->evdev, ABS_MT_POSITION_Y, &priv->miny, &priv->maxy, &priv->synpara.hyst_y, &priv->resy); + + if (priv->minx == priv->maxx || priv->miny == priv->maxy) { + xf86IDrvMsg(pInfo, X_ERROR, "Kernel bug: min == max on ABS_MT_POSITION_X/Y\n"); + return; + } proto_data->st_to_mt_offset[0] = priv->minx - st_minx; proto_data->st_to_mt_scale[0] = Index: src/synaptics.c =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/synaptics.c,v retrieving revision 1.10 diff -u -p -r1.10 synaptics.c --- src/synaptics.c 24 Jan 2015 17:43:59 -0000 1.10 +++ src/synaptics.c 29 Mar 2015 11:26:09 -0000 @@ -674,7 +674,7 @@ set_default_parameters(InputInfoPtr pInf pars->finger_high = xf86SetIntOption(opts, "FingerHigh", fingerHigh); pars->tap_time = xf86SetIntOption(opts, "MaxTapTime", 180); pars->tap_move = xf86SetIntOption(opts, "MaxTapMove", tapMove); - pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 180); + pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 100); pars->click_time = xf86SetIntOption(opts, "ClickTime", 100); pars->clickpad = xf86SetBoolOption(opts, "ClickPad", pars->clickpad); /* Probed */ if (pars->clickpad) @@ -2049,13 +2049,10 @@ HandleTapProcessing(SynapticsPrivate * p SetTapState(priv, TS_SINGLETAP, now); break; case TS_2B: - if (touch) { + if (touch) SetTapState(priv, TS_3, now); - } - else if (is_timeout) { - SetTapState(priv, TS_START, now); - priv->tap_button_state = TBS_BUTTON_DOWN_UP; - } + else if (is_timeout) + SetTapState(priv, TS_SINGLETAP, now); break; case TS_SINGLETAP: if (touch) @@ -3209,20 +3206,8 @@ HandleState(InputInfoPtr pInfo, struct S (hw->down ? 0x10 : 0) | (hw->multi[2] ? 0x20 : 0) | (hw->multi[3] ? 0x40 : 0)); - if (priv->tap_button > 0) { - int tap_mask = 1 << (priv->tap_button - 1); - - if (priv->tap_button_state == TBS_BUTTON_DOWN_UP) { - if (tap_mask != (priv->lastButtons & tap_mask)) { - xf86PostButtonEvent(pInfo->dev, FALSE, priv->tap_button, TRUE, - 0, 0); - priv->lastButtons |= tap_mask; - } - priv->tap_button_state = TBS_BUTTON_UP; - } - if (priv->tap_button_state == TBS_BUTTON_DOWN) - buttons |= tap_mask; - } + if (priv->tap_button > 0 && priv->tap_button_state == TBS_BUTTON_DOWN) + buttons |= 1 << (priv->tap_button - 1); /* Post events */ if (finger >= FS_TOUCHED && (dx || dy) && !ignore_motion) Index: src/synapticsstr.h =================================================================== RCS file: /cvs/xenocara/driver/xf86-input-synaptics/src/synapticsstr.h,v retrieving revision 1.7 diff -u -p -r1.7 synapticsstr.h --- src/synapticsstr.h 17 May 2014 17:18:21 -0000 1.7 +++ src/synapticsstr.h 29 Mar 2015 11:26:09 -0000 @@ -137,7 +137,6 @@ enum TapState { enum TapButtonState { TBS_BUTTON_UP, /* "Virtual tap button" is up */ TBS_BUTTON_DOWN, /* "Virtual tap button" is down */ - TBS_BUTTON_DOWN_UP /* Send button down event + set up state */ }; enum TouchpadModel {
