--- xserver-xorg-input-synaptics-1.5.99.901.orig/autogen.sh
+++ xserver-xorg-input-synaptics-1.5.99.901/autogen.sh
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+
+autoreconf -v --install || exit 1
+cd $ORIGDIR || exit $?
+
+$srcdir/configure --enable-maintainer-mode "$@"
--- xserver-xorg-input-synaptics-1.5.99.901.orig/docs/README.alps
+++ xserver-xorg-input-synaptics-1.5.99.901/docs/README.alps
@@ -0,0 +1,77 @@
+It is possible to use this driver with an ALPS Glidepoint device. If
+you use an older 2.6 linux kernel which has no ALPS input driver, you
+need to apply the ALPS kernel patch in the alps.patch file. See
+http://www.kernelnewbies.org/faq/ for information about how to apply
+kernel patches and compile kernels.
+
+Note! If you use kernel 2.6.11 or later, the alps patch is already
+included, so you don't have to patch your kernel.
+
+Since ALPS touchpads don't have the same resolution as Synaptics
+touchpads, you probably have to change some parameter values. Here is
+an example InputDevice section for the X configuration file.
+
+Section "InputDevice"
+ Driver "synaptics"
+ Identifier "Mouse[1]"
+ Option "Device" "/dev/psaux"
+ Option "Protocol" "auto-dev"
+# enable SHMConfig if you want to enable synclient
+# NB: enabling SHMConfig is insecure, since any user can invoke it
+# Option "SHMConfig" "on"
+ Option "LeftEdge" "120"
+ Option "RightEdge" "830"
+ Option "TopEdge" "120"
+ Option "BottomEdge" "650"
+ Option "FingerLow" "14"
+ Option "FingerHigh" "15"
+ Option "MaxTapTime" "180"
+ Option "MaxTapMove" "110"
+ Option "EmulateMidButtonTime" "75"
+ Option "VertScrollDelta" "20"
+ Option "HorizScrollDelta" "20"
+ Option "CornerCoasting" "1"
+ Option "CoastingSpeed" "3"
+ Option "MinSpeed" "0.3"
+ Option "MaxSpeed" "0.75"
+ Option "AccelFactor" "0.015"
+ Option "EdgeMotionMinSpeed" "200"
+ Option "EdgeMotionMaxSpeed" "200"
+ Option "UpDownScrolling" "1"
+ Option "CircularScrolling" "1"
+ Option "CircScrollDelta" "0.1"
+ Option "CircScrollTrigger" "2"
+EndSection
+
+If you use a 2.4 linux kernel, you don't need to patch the kernel, but
+you should instead set "Protocol" like this:
+
+ Option "Protocol" "alps"
+
+
+On some (all?) ALPS hardware, it is not possible to disable tapping
+unless you apply the patch below. However, some users have reported
+that this patch breaks tap-and-drag operations, which is why the patch
+is not included in the main alps.patch file.
+
+--- linux/drivers/input/mouse/alps.c~alps-test3 2004-02-28 20:46:34.000000000 +0100
++++ linux-petero/drivers/input/mouse/alps.c 2004-02-28 20:49:12.000000000 +0100
+@@ -87,6 +87,10 @@ static void ALPS_process_packet(struct p
+ y = (packet[4] & 0x7f) | ((packet[3] & 0x70)<<(7-4));
+ z = packet[5];
+
++ if (packet[2] & 1) {
++ z = 35;
++ }
++
+ if (z > 0) {
+ input_report_abs(dev, ABS_X, x);
+ input_report_abs(dev, ABS_Y, y);
+@@ -97,7 +101,6 @@ static void ALPS_process_packet(struct p
+ if (z > 30) input_report_key(dev, BTN_TOUCH, 1);
+ if (z < 25) input_report_key(dev, BTN_TOUCH, 0);
+
+- left |= (packet[2] ) & 1;
+ left |= (packet[3] ) & 1;
+ right |= (packet[3] >> 1) & 1;
+ if (packet[0] == 0xff) {
--- xserver-xorg-input-synaptics-1.5.99.901.orig/docs/tapndrag.dia
+++ xserver-xorg-input-synaptics-1.5.99.901/docs/tapndrag.dia
@@ -0,0 +1,1827 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ #A4#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #Start#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #1#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #2b#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #3#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #Move#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #Drag#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T : Touch
+R : Release
+TO : Tap Timeout
+TO2: Mouse click timeout
+TO3: Double tap timeout
+TO4: Single tap timeout
+TO5: Locked drag timeout
+M : Finger movement
+[U]: Generate button up event
+[D]: Generate button down event
+L : Locked drags enabled
+F : Fast taps enabled
+TDG: Tap-and-drag gesture enabled#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T
+[D]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R
+[D] if F#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R
+[U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO or M#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(TO or M)
+and TDG#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO3
+[D,U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R & !L
+[U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #4#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #5#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R & L#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO
+or
+M#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #R
+[U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #2a#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #Single
+Tap#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO4
+[U] if F
+[D] if !F#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T
+[D] if TDG#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO2
+[U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #T
+[U]#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #TO5#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #(TO or M)
+and !TDG#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/docs/trouble-shooting.txt
+++ xserver-xorg-input-synaptics-1.5.99.901/docs/trouble-shooting.txt
@@ -0,0 +1,152 @@
+Trouble-shooting guide
+----------------------
+
+Contents
+--------
+
+1. Check that the touchpad is correctly detected by the kernel
+2. Check that an external PS/2 mouse isn't causing problems
+3. Check if some other program is using the /dev/psaux device
+4. Check that the evdev kernel driver is available
+5. Check that the synaptics driver is properly loaded by the X server
+6. Check that the touchpad is enabled in the BIOS/hardware
+
+
+1. Check that the touchpad is correctly detected by the kernel
+--------------------------------------------------------------
+
+If you are using a 2.6 linux kernel, check the /proc/bus/input/devices
+file. The touchpad must be identified a "SynPS/2 Synaptics TouchPad"
+or an "AlpsPS/2 ALPS TouchPad". If it is identified as a "PS/2 Generic
+Mouse" or "PS/2 Synaptics TouchPad", something is wrong.
+
+Possible fixes:
+
+1. Check your BIOS settings. Some BIOSes can do USB -> PS/2 mouse
+ emulation which can interfere with the touchpad. There may be a way
+ to disable the legacy mouse emulation from the BIOS setup program.
+
+2. Arrange so that the kernel initializes the USB subsystem before the
+ PS/2 touchpad. Initializing the USB mouse sometimes disables the
+ BIOS emulation. Compiling psmouse as a module and loading it in
+ /etc/rc.d/rc.local usually assures the USB is initialized first.
+
+3. Disconnect the USB mouse and restart the computer. (Not really a fix,
+ but can help when trying to figure out what's wrong.)
+
+4. Make sure your boot loader doesn't pass any parameter to the kernel
+ that disables mouse extensions. ("psmouse_proto=bare" for example).
+ Alternatively, if psmouse is compiled as a module, make sure that
+ modprobe doesn't pass such parameters. Check /etc/modprobe.conf and
+ "rmmod psmouse; modprobe -v psmouse".
+
+If you run a 2.4 kernel or an non-linux kernel, the
+/proc/bus/input/devices file is not available, but the BIOS setting
+could be relevant anyway.
+
+
+2. Check that an external PS/2 mouse isn't causing problems
+-----------------------------------------------------------
+
+If you want to use an external PS/2 mouse at the same time as the
+synaptics touchpad driver, you must use a 2.6 linux kernel and your
+hardware (keyboard controller) must support active multiplexing. You
+should see something like this when the computer boots:
+
+ mice: PS/2 mouse device common for all mice
+ i8042.c: Detected active multiplexing controller, rev 1.1.
+ serio: i8042 AUX0 port at 0x60,0x64 irq 12
+ serio: i8042 AUX1 port at 0x60,0x64 irq 12
+ serio: i8042 AUX2 port at 0x60,0x64 irq 12
+ serio: i8042 AUX3 port at 0x60,0x64 irq 12
+
+If you don't use a 2.6 kernel or your hardware doesn't support active
+multiplexing, you can't use an external PS/2 mouse together with the
+touchpad driver.
+
+
+3. Check if some other program is using the /dev/psaux device
+-------------------------------------------------------------
+
+If you use a 2.4 linux kernel, only one program at a time can reliably
+read from /dev/psaux. This means that if you for example have GPM
+running, it will probably prevent the synaptics driver from working
+correctly. It also means that if you have a second InputDevice in your
+X configuration file, it must not read from /dev/psaux. You probably
+want it to read from /dev/input/mice instead, which will handle USB
+mice in both 2.4 and 2.6 linux kernels, and both USB and external PS/2
+mice if you use a 2.6 kernel.
+
+The 2.6 linux kernel fixes the /dev/psaux shortcoming, so that you can
+safely run GPM and the synaptics driver at the same time.
+
+
+4. Check that the evdev kernel driver is available
+--------------------------------------------------
+
+If you are using a 2.6 linux kernel, the evdev kernel driver is needed
+for the X driver to be able to communicate with the kernel driver.
+Check the /proc/bus/input/devices file. The Handlers= line should
+contain an event device name, like this:
+
+ H: Handlers=mouse0 event0
+
+If there is no event handler, you either have to load the evdev kernel
+module or recompile the kernel and build it into the kernel. If you
+don't want to recompile the kernel, adding "/sbin/modprobe evdev" to
+/etc/rc.d/rc.sysinit usually works.
+
+
+5. Check that the synaptics driver is properly loaded by the X server
+---------------------------------------------------------------------
+
+The X log file is usually called /var/log/XFree86.0.log or
+/var/log/Xorg.0.log. It should contain something like this:
+
+ (II) LoadModule: "synaptics"
+ (II) Loading /usr/X11R6/lib/modules/input/synaptics_drv.o
+ (II) Module synaptics: vendor="X.Org Foundation"
+ compiled for 4.3.99.902, module version = 1.0.0
+ Module class: X.Org XInput Driver
+ ABI class: X.Org XInput driver, version 0.4
+
+If the LoadModule line is missing, you probably forgot to add
+
+ Load "synaptics"
+
+to the "Module" section in the X config file, or you modified the
+wrong config file. Some systems that have been upgraded from XFree86
+to Xorg or from XFree86 3.x to XFree86 4.x can have multiple config
+files in the /etc/X11/ directory, but only one is used.
+
+Next, check that the log file also contains a line like this:
+
+ (II) Synaptics touchpad driver version 0.13.4
+
+If there is no such line, there is probably a binary compatibility
+problem between the synaptics driver and the X server.
+
+Possible fixes:
+
+1. Try upgrading to the latest synaptics driver.
+
+2. Try installing the X SDK package if it is available for your
+ version of X. (In Fedora Core 2, that package is called
+ xorg-x11-sdk-6.7.0-2.i386.rpm.) Then re-compile the synaptics
+ driver and try again.
+
+3. Make sure the driver is compiled with the same compiler version as
+ the X server.
+
+
+6. Check that the touchpad is enabled in the BIOS/hardware
+----------------------------------------------------------
+
+On some computers, it is possible to disable the touchpad either with
+a special key combination, from the BIOS, or with a special touchpad
+on/off button. On some machines, cycling the power doesn't
+automatically reenable the touchpad.
+
+If the touchpad appears to be dead, try to enable it from the BIOS or
+using a key combination. One user also reported that he had to remove
+the computer battery to make his touchpad operational again.
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics.install
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics.install
@@ -0,0 +1,6 @@
+usr/lib/xorg/modules/input/*.so
+usr/bin/*
+usr/share/man
+usr/share/X11
+debian/local/51-synaptics-quirks.conf usr/share/X11/xorg.conf.d
+debian/local/66-xorg-synaptics-quirks.rules lib/udev/rules.d
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/control
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/control
@@ -0,0 +1,72 @@
+Source: xserver-xorg-input-synaptics
+Section: x11
+Priority: optional
+Maintainer: Ubuntu Core Developers
+XSBC-Original-Maintainer: Debian X Strike Force
+Uploaders: Mattia Dongili , Cyril Brulebois
+Build-Depends:
+ debhelper (>= 8),
+ dh-autoreconf,
+ libx11-dev,
+ libxext-dev,
+ libxi-dev (>= 2:1.2.0),
+ x11proto-core-dev,
+ xserver-xorg-dev (>= 2:1.11.3-0ubuntu1),
+ pkg-config,
+ quilt,
+ xutils-dev (>= 1:7.5+4),
+ x11proto-input-dev (>= 2.1.99.5),
+ libmtdev-dev,
+Build-Conflicts:
+ libxtst-dev
+Standards-Version: 3.9.3
+Vcs-Git: git://git.debian.org/git/pkg-xorg/driver/xserver-xorg-input-synaptics
+Vcs-Browser: http://git.debian.org/?p=pkg-xorg/driver/xserver-xorg-input-synaptics.git
+
+Package: xserver-xorg-input-synaptics
+Architecture: any
+Depends:
+ udev [linux-any],
+ ${shlibs:Depends},
+ ${xinpdriver:Depends},
+ ${misc:Depends},
+Conflicts: xorg-driver-synaptics
+Replaces: xorg-driver-synaptics
+Provides: ${xinpdriver:Provides}, xorg-driver-synaptics
+Suggests: gpointing-device-settings, touchfreeze
+Description: Synaptics TouchPad driver for X.Org server
+ This package provides an input driver for the X.Org X server to enable
+ advanced features of the Synaptics Touchpad including:
+ .
+ * Movement with adjustable, non-linear acceleration and speed
+ * Button events through short touching of the touchpad
+ * Double-Button events through double short touching of the touchpad
+ * Dragging through short touching and holding down the finger on the touchpad
+ * Middle and right button events on the upper and lower corner of the touchpad
+ * Vertical scrolling (button four and five events) through moving the finger
+ on the right side of the touchpad
+ * The up/down button sends button four/five events
+ * Horizontal scrolling (button six and seven events) through moving the finger
+ on the lower side of the touchpad
+ * The multi-buttons send button four/five events, and six/seven events for
+ horizontal scrolling
+ * Adjustable finger detection
+ * Multifinger taps: two finger for middle button and three finger for right
+ button events. (Needs hardware support. Not all models implement this
+ feature.)
+ * Run-time configuration using shared memory. This means you can change
+ parameter settings without restarting the X server (see synclient(1)).
+ * It also provides a daemon to disable touchpad while typing at the keyboard
+ and thus avoid unwanted mouse movements (see syndaemon(1)).
+ .
+
+Package: xserver-xorg-input-synaptics-dev
+Section: libdevel
+Architecture: all
+Depends:
+ x11proto-core-dev,
+ ${misc:Depends},
+Description: Synaptics TouchPad driver for X.Org server (development headers)
+ This package contains the development headers for the Synaptics input
+ driver found in xserver-xorg-input-synaptics. Non-developers likely have
+ little use for this package.
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/compat
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/compat
@@ -0,0 +1 @@
+8
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics.README.Debian
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics.README.Debian
@@ -0,0 +1,98 @@
+xserver-xorg-input-synaptics for Debian
+---------------------------------------
+
+This package contains the Synaptics TouchPad driver for X.Org X server.
+See also the README file for details on configuration options.
+
+
+Runtime configuration
+---------------------
+
+The synclient and xinput tools allow configuring various aspects of the
+driver's behaviour. See the synaptics(4) man page for details of the
+configurable options.
+
+
+Manual configuration
+--------------------
+
+1. Load the driver by changing the X.Org configuration file
+(/etc/X11/xorg.conf) through adding the line 'Load
+"synaptics"' in the module section.
+
+2. Add/Replace in the InputDevice section for the touchpad the
+following lines:
+
+Section "InputDevice"
+ Driver "synaptics"
+ Identifier "touchpad"
+ Option "Device" "/dev/psaux"
+ Option "Protocol" "auto-dev"
+#
+# Following lines are optional thus commented in this example.
+# Please read the synaptics(4) manpage for a detailed explanation
+# of the various options' meaning as well as a full list of options
+#
+# Option "LeftEdge" "1700"
+# Option "RightEdge" "5300"
+# Option "TopEdge" "1700"
+# Option "BottomEdge" "4200"
+# Option "FingerLow" "25"
+# Option "FingerHigh" "30"
+# Option "MaxTapTime" "180"
+# Option "MaxTapMove" "220"
+# Option "VertScrollDelta" "100"
+# Option "MinSpeed" "0.06"
+# Option "MaxSpeed" "0.12"
+# Option "AccelFactor" "0.0010"
+# Option "Repeater" "/dev/ps2mouse"
+EndSection
+
+Change the Identifier to the same name as in the ServerLayout section.
+The Option "Repeater" is at the moment for testing.
+
+3. Add the "CorePointer" option to the InputDevice line at the ServerLayout section:
+
+Section "ServerLayout"
+...
+ InputDevice "touchpad" "CorePointer"
+ InputDevice "USB Mouse" "SendCoreEvents"
+...
+
+ Note! You can not have more than one core pointer, so if you want
+ to use an external mouse too, you have to set all mouse input
+ devices except one to "AlwaysCore" instead of "CorePointer".
+
+4. Start/Restart the X Server. If the touchpad doesn't work:
+ a) Check the X.Org Logfiles
+ b) Try to start the XServer with 'startx -- -logverbose 8' for more
+ Output
+
+Other relevant information to use this driver
+---------------------------------------------
+
+1. For use with kernel 2.6.x you need to enable synaptics touchpad
+ support when configuring the kernel (CONFIG_MOUSE_PS2). You also
+ need support for the evdev interface (CONFIG_INPUT_EVDEV). If you
+ compile evdev as a module, make sure it is loaded before starting
+ the X server, as it will not be auto-loaded.
+
+2. For use with an ALPS touchpad, you need to use a 2.6.x kernel and
+ apply the alps patch. See the README.alps file for more details.
+ Note! If you use kernel 2.6.11 or later, the alps patch is already
+ included, so you don't have to patch your kernel.
+
+3. Using with kernel 2.4.x for x < 10 needs a kernel patch
+ (pc_keyb.c.diff.2.4.3).
+
+Running 'syndaemon' automatically
+---------------------------------
+The easiest way to run the syndaemon binary each time you startup X you can
+simply add the following line to your ~/.xinitrc file:
+
+/usr/bin/syndaemon -i 1 -d
+
+Customize the daemon options to fit your needs, the only mandatory option is
+'-d' to run syndaemon in the background. See 'man 1 syndaemon' for more.
+
+ -- Mattia Dongili , Mon, 11 May 2009 23:04:40 +0900
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics-dev.install
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics-dev.install
@@ -0,0 +1,2 @@
+usr/include/xorg/*
+usr/lib/pkgconfig/xorg-synaptics.pc
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/README.source
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/README.source
@@ -0,0 +1,49 @@
+------------------------------------------------------
+Quick Guide To Patching This Package For The Impatient
+------------------------------------------------------
+
+1. Make sure you have quilt installed
+2. Unpack the package as usual with "dpkg-source -x"
+3. Run the "patch" target in debian/rules
+4. Create a new patch with "quilt new" (see quilt(1))
+5. Edit all the files you want to include in the patch with "quilt edit"
+ (see quilt(1)).
+6. Write the patch with "quilt refresh" (see quilt(1))
+7. Run the "clean" target in debian/rules
+
+Alternatively, instead of using quilt directly, you can drop the patch in to
+debian/patches and add the name of the patch to debian/patches/series.
+
+------------------------------------
+Guide To The X Strike Force Packages
+------------------------------------
+
+The X Strike Force team maintains X packages in git repositories on
+git.debian.org in the pkg-xorg subdirectory. Most upstream packages
+are actually maintained in git repositories as well, so they often
+just need to be pulled into git.debian.org in a "upstream-*" branch.
+Otherwise, the upstream sources are manually installed in the Debian
+git repository.
+
+The .orig.tar.gz upstream source file could be generated using this
+"upstream-*" branch in the Debian git repository but it is actually
+copied from upstream tarballs directly.
+
+Due to X.org being highly modular, packaging all X.org applications
+as their own independent packages would have created too many Debian
+packages. For this reason, some X.org applications have been grouped
+into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils,
+x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils.
+Most packages, including the X.org server itself and all libraries
+and drivers are, however maintained independently.
+
+The Debian packaging is added by creating the "debian-*" git branch
+which contains the aforementioned "upstream-*" branch plus the debian/
+repository files.
+When a patch has to be applied to the Debian package, two solutions
+are involved:
+* If the patch is available in one of the upstream branches, it
+ may be git'cherry-picked into the Debian repository. In this
+ case, it appears directly in the .diff.gz.
+* Otherwise, the patch is added to debian/patches/ which is managed
+ with quilt as documented in /usr/share/doc/quilt/README.source.
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/copyright
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/copyright
@@ -0,0 +1,67 @@
+This package was debianized by Mattia Dongili on
+Tue, 2 Mar 2004 11:42:05 +0100.
+
+It was downloaded from
+git://anongit.freedesktop.org/git/xorg/driver/xf86-input-synaptics.
+Release tarballs are available at
+http://xorg.freedesktop.org/releases/individual/driver/
+
+Copyright (c) 1997 C. Scott Ananian
+Copyright (c) 1998-2000 Bruce Kalk
+Copyright (c) 1999 Henry Davies
+Copyright (c) 2001 Stefan Gmeiner
+Copyright (c) 2002 Linuxcare Inc. David Kennedy
+Copyright (c) 2003 Fred Hucht
+Copyright (c) 2003 Neil Brown
+Copyright (c) 2003 Jörg Bösner
+Copyright (c) 2003 Hartwig Felger
+Copyright (c) 2002-2007 Peter Osterlund
+Copyright (c) 2004 Arne Schwabe
+Copyright (c) 2004 Matthias Ihmig
+Copyright (c) 2004 Alexei Gilchrist
+Copyright (c) 2006-2007 Christian Thaeter
+Copyright (c) 2006 Stefan Bethge
+Copyright (c) 2007 Joseph P. Skudlarek
+Copyright (c) 2007 Florian Loitsch
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+Some patches included in the Debian package are licensed differently:
+ debian/patches/01-synaptics-dont-grab-if-not-on-current-VT.patch
+ debian/patches/02-autodetect-resolution.patch
+
+Copyright (c) Matthew Garrett
+
+ This package 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; version 2 dated June, 1991.
+
+ This package 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 package; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ MA 02110-1301, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL-2'.
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics.links
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics.links
@@ -0,0 +1 @@
+usr/share/bug/xserver-xorg-core/script usr/share/bug/xserver-xorg-input-synaptics/script
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/gbp.conf
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/gbp.conf
@@ -0,0 +1,3 @@
+[DEFAULT]
+debian-branch=ubuntu
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/watch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/watch
@@ -0,0 +1,3 @@
+#git=git://anongit.freedesktop.org/xorg/driver/xf86-input-synaptics
+version=3
+http://xorg.freedesktop.org/releases/individual/driver/ xf86-input-synaptics-(.*)\.tar\.gz
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/changelog
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/changelog
@@ -0,0 +1,1467 @@
+xserver-xorg-input-synaptics (1.5.99.901-0ubuntu2) precise; urgency=low
+
+ * Disable three touch tap in favor of uTouch gestures (LP: #961725)
+ - See
+ https://lists.ubuntu.com/archives/ubuntu-desktop/2012-February/003694.html
+ for details.
+ - Add 129_disable_three_touch_tap.patch
+ * Fix click actions for non-clickpad touchpads (LP: #960108)
+ - Add temporary patch 200_fix_clickfinger_non-clickpads.patch
+ * Fix click action finger count calculation (LP: #961738)
+ - Add temporary patch 201_fix_clickfinger_clickpad_actions.patch
+
+ -- Chase Douglas Wed, 21 Mar 2012 16:00:26 -0700
+
+xserver-xorg-input-synaptics (1.5.99.901-0ubuntu1) precise; urgency=low
+
+ * New upstream release
+ - Includes ClickPad support
+ - Fixes ClickPad click action interference
+ - Re-enables ClickPad support by default (LP: #955404)
+ - Everything else is bug fixes
+ * Remove 129_clickpad.patch, it has been merged upstream
+ * Bump lintian standards to 3.9.3
+
+ -- Chase Douglas Thu, 15 Mar 2012 17:58:09 -0700
+
+xserver-xorg-input-synaptics (1.5.99~git20120223-0ubuntu2) precise; urgency=low
+
+ * Disable ClickPad support when there is no physical right button
+ (LP: #941046)
+ - This re-enables click actions, which was enabled by default previously
+ - Users can enable ClickPad support through xorg.conf, xinput, or synclient
+ - See
+ https://lists.ubuntu.com/archives/ubuntu-desktop/2012-February/003751.html
+ for the discussion guiding this change.
+ * Refresh ClickPad support patch with changes from upstream review
+ - No new functionality
+ * Remove bottom area mask for Dell netbook clickpads with two buttons
+
+ -- Chase Douglas Fri, 02 Mar 2012 13:33:26 -0700
+
+xserver-xorg-input-synaptics (1.5.99~git20120223-0ubuntu1) precise; urgency=low
+
+ * Update to latest code in git (0a2fd56)
+ - Only includes bug fixes
+ * Drop temporary patches that have been merged upstream:
+ - 129_tmp_pointer_drift.patch
+ - 130_tmp_touch_count_fix.patch
+ * Revert tap-and-drag locking default change (LP: #934770)
+ - Drop 127_default_drag_lock.patch
+ * Add ClickPad support (LP: #932947)
+ - Add 129_clickpad.patch
+
+ -- Chase Douglas Thu, 23 Feb 2012 11:54:37 -0800
+
+xserver-xorg-input-synaptics (1.5.99~git20120220-0ubuntu3) precise; urgency=low
+
+ * Fix crash on multitouch devices when disabled while typing (LP: #931344)
+ - Add temporary patch 130_tmp_touch_count_fix.patch
+
+ -- Chase Douglas Tue, 21 Feb 2012 16:22:17 +0100
+
+xserver-xorg-input-synaptics (1.5.99~git20120220-0ubuntu2) precise; urgency=low
+
+ * Prevent trackpad pointer drift (LP: #921082)
+ - Add temporary patch 129_tmp_pointer_drift.patch from upstream
+
+ -- Chase Douglas Mon, 20 Feb 2012 11:55:23 +0100
+
+xserver-xorg-input-synaptics (1.5.99~git20120220-0ubuntu1) precise; urgency=low
+
+ * Update to latest code in git (f9a9065)
+ - Scale single-touch values to multitouch axes (LP: #936856)
+
+ -- Chase Douglas Mon, 20 Feb 2012 11:13:10 +0100
+
+xserver-xorg-input-synaptics (1.5.0+git20120210-0ubuntu2) precise; urgency=low
+
+ * Enable tap-and-drag locked drags by default
+ * Disable three-click action by default so three touch gestures work
+
+ -- Chase Douglas Mon, 13 Feb 2012 20:51:56 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120210-0ubuntu1) precise; urgency=low
+
+ * Update to latest code in git (e6032c3)
+ * Drop 127_multitouch.patch, merged upstream
+ * Drop 126_default_speed.patch, no longer necessary
+ * Refresh 125_option_rec_revert.patch
+ * Add 126_ubuntu_xi22.patch for ubuntu frankenserver support
+
+ -- Chase Douglas Fri, 10 Feb 2012 18:27:53 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1ubuntu2) precise; urgency=low
+
+ * Add some error handling so eventcomm-test doesn't segfault
+ - Modified 127_multitouch.patch
+
+ -- Chase Douglas Thu, 19 Jan 2012 17:44:47 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1ubuntu1) precise; urgency=low
+
+ * Add multitouch support
+ - Add 127_multitouch.patch
+ * Bump Build-Depends for x11proto-input-dev to 2.1.99.5
+ * Remove obsolete dependencies on utouch-grail and old xserver-xorg-core
+
+ -- Chase Douglas Thu, 19 Jan 2012 16:39:31 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1ubuntu1~nomt3) precise; urgency=low
+
+ * Fix default speed due to change in motion estimation
+ - Add 126_default_speed.patch
+
+ -- Chase Douglas Thu, 12 Jan 2012 03:59:25 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1ubuntu1~nomt2) precise; urgency=low
+
+ * Drop patch 122_revert_pressure_finger_default.patch, merged upstream
+
+ -- Chase Douglas Mon, 09 Jan 2012 07:03:52 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1ubuntu1~nomt1) precise; urgency=low
+
+ * Lower xserver-xorg-dev build dep for Precise's X server
+ * Revert xf86OptionRec upstream changes
+ - This particular API change will not be in Precise's X server
+
+ -- Chase Douglas Mon, 09 Jan 2012 07:00:49 -0800
+
+xserver-xorg-input-synaptics (1.5.0+git20120101-1) experimental; urgency=low
+
+ * New upstream snapshot:
+ - Merge from upstream master up to 9f9b55ab55.
+ * Build against Xserver 1.12 RC1.
+
+ -- Cyril Brulebois Sun, 01 Jan 2012 07:54:51 +0100
+
+xserver-xorg-input-synaptics (1.5.0-2ubuntu1~nomt1) UNRELEASED; urgency=low
+
+ * Merge from Debian testing. Remaining Ubuntu changes:
+ - 101_resolution_detect_option.patch:
+ + Provide an option to prevent synaptics from communicating the
+ touchpad size to the xserver. (LP: 327428)
+ - 103_enable_cornertapping.patch:
+ + Enable right/middle clicks by tapping in the bottom- and top-right
+ corners.
+ - 104_always_enable_tapping.patch:
+ + Enable tapping regardless of the presence of physical buttons.
+ - 106_always_enable_vert_edge_scroll.patch:
+ + Enable vertical edge tapping by default even if we enable two-finger
+ scrolling as well.
+ - 115_evdev_only.patch:
+ + Only bind to /dev/input/event* evdev devices (LP 624985)
+ - 118_quell_error_msg.patch:
+ + Don't print error "Unable to find a synaptics device" when used
+ on system that doesn't have a touchpad anyway. (LP: 716712)
+ - 122_revert_pressure_finger_default.patch:
+ + Fix spurious right click events on some trackpads (LP: 742213)
+ - 124_syndaemon_events.patch:
+ + Drain spurious events from XRecord connection as a work around
+ for a buggy X server. (LP: 754470)
+ - debian/control:
+ + Depend on udev.
+ + Move libxtst-dev to Build-Conflicts so syndaemon does not use XRecord,
+ preventing a wide range of crashes in _CallCallbacks. (LP: 774978)
+ - debian/gbp.conf:
+ + Specify ‘ubuntu’ branch.
+ - debian/local/51-synaptics-quirks.conf:
+ + Split out our synaptics quirks into 51-synaptics-quirks.conf
+ - debian/local/66-xorg-synaptics.rules:
+ + Add the udev rule back for tagging specific machines to be quirked.
+ - debian/xserver-xorg-input-synaptics.postinst.in:
+ + Trigger udev to pick up new udev rules
+ * Temporarily drop multitouch patches for X server 1.11 bringup:
+ + 116_xi2_1.patch
+ + 117_gestures.patch
+ + 119_active_area_touches.patch
+ + 120_active_touches_num_fingers.patch
+ + 121_semi-mt_num_fingers.patch
+ + 123_order_ProcessTouch_for_numFingers.patch
+ * debian/patches/122_revert_pressure_finger_default.patch:
+ + Refresh for new upstream
+
+ -- Christopher James Halse Rogers Mon, 19 Dec 2011 11:10:25 +1100
+
+xserver-xorg-input-synaptics (1.5.0-2) unstable; urgency=low
+
+ * Cherry-pick to fix regression on powerpc (Closes: #649002):
+ - b7e65f04f: Revert the switch from TEST_BIT to BitIsOn.
+
+ -- Cyril Brulebois Mon, 12 Dec 2011 13:28:36 +0100
+
+xserver-xorg-input-synaptics (1.5.0-1) unstable; urgency=low
+
+ [ Timo Aaltonen ]
+ * New upstream release.
+
+ -- Cyril Brulebois Fri, 11 Nov 2011 17:15:22 +0100
+
+xserver-xorg-input-synaptics (1.4.1-1ubuntu2) oneiric; urgency=low
+
+ * Really install the quirks files, and rename the udev rules file
+ to emphasize that it's about quirks.
+ * postinst: Bump the version check to run udevadm trigger on upgrade.
+
+ -- Timo Aaltonen Thu, 29 Sep 2011 22:16:55 +0300
+
+xserver-xorg-input-synaptics (1.4.1-1ubuntu1) oneiric; urgency=low
+
+ * Merge from Debian unstable, remaining changes:
+ - 101_resolution_detect_option.patch:
+ + Provide an option to prevent synaptics from communicating the
+ touchpad size to the xserver. (LP: 327428)
+ - 103_enable_cornertapping.patch:
+ + Enable right/middle clicks by tapping in the bottom- and top-right
+ corners.
+ - 104_always_enable_tapping.patch:
+ + Enable tapping regardless of the presence of physical buttons.
+ - 106_always_enable_vert_edge_scroll.patch:
+ + Enable vertical edge tapping by default even if we enable two-finger
+ scrolling as well.
+ - 115_evdev_only.patch:
+ + Only bind to /dev/input/event* evdev devices (LP 624985)
+ - 116_xi2_1.patch:
+ - 117_gestures.patch:
+ + multitouch and uTouch gesture support
+ - 118_quell_error_msg.patch:
+ + Don't print error "Unable to find a synaptics device" when used
+ on system that doesn't have a touchpad anyway. (LP: 716712)
+ - 119_active_area_touches.patch:
+ - 120_active_touches_num_fingers.patch:
+ - 121_semi-mt_num_fingers.patch:
+ + Fix handling for SemiMultitouch trackpads with integrated buttons
+ (LP: 736523)
+ - 122_revert_pressure_finger_default.patch:
+ + Fix spurious right click events on some trackpads (LP: 742213)
+ - 123_order_ProcessTouch_for_numFingers.patch:
+ + Fix jumpy cursor on multitouch trackpads (LP: 751525)
+ - 124_syndaemon_events.patch:
+ + Drain spurious events from XRecord connection as a work around
+ for a buggy X server. (LP: 754470)
+ - debian/control:
+ + Add depends on libmtdev and libutouch-grail
+ + Build-depend on multitouch-enabled inputproto.
+ + Depend on multitouch-enabled xserver.
+ + Depend on udev.
+ + Move libxtst-dev to Build-Conflicts so syndaemon does not use XRecord,
+ preventing a wide range of crashes in _CallCallbacks. (LP: 774978)
+ - debian/gbp.conf:
+ + Specify ‘ubuntu’ branch.
+ - debian/local/51-synaptics-quirks.conf:
+ + Split out our synaptics quirks into 51-synaptics-quirks.conf
+ - debian/local/66-xorg-synaptics.rules:
+ + Add the udev rule back for tagging specific machines to be quirked.
+ - debian/xserver-xorg-input-synaptics.postinst.in:
+ + Trigger udev to pick up new udev rules
+ * Drop 114_jumpy_cursor_first_part.patch, fixed upstream.
+ * Update 115_evdev_only.patch to apply.
+ * Update 117_gestures.patch to apply.
+
+ -- Timo Aaltonen Tue, 05 Jul 2011 16:40:31 +0300
+
+xserver-xorg-input-synaptics (1.4.1-1) unstable; urgency=low
+
+ * New upstream release:
+ - Fix some typos in documentation (Closes: #622663).
+ - Fix “syndaemon consumes 100% CPU” (LP: #754470).
+ * Bump Standards-Version to 3.9.2 (no changes).
+ * Refresh patch:
+ - 02-do-not-use-synaptics-for-keyboards.patch to cope with the lines
+ removed in d25ba5e11d.
+ * Drop patch:
+ - 03-man-no-hal.patch, superseded by upstream commit e49d5d07c7.
+
+ -- Cyril Brulebois Tue, 28 Jun 2011 15:38:13 +0200
+
+xserver-xorg-input-synaptics (1.4.0-1) unstable; urgency=low
+
+ * New upstream release:
+ + Fix the FTBFS on GNU/kFreeBSD.
+
+ -- Cyril Brulebois Sat, 05 Mar 2011 16:26:01 +0100
+
+xserver-xorg-input-synaptics (1.3.99.901-1) unstable; urgency=low
+
+ * New upstream release.
+ * Disable patch: 01-synaptics-dont-grab-if-not-on-current-VT.patch (no
+ longer applies, needs to be sent/discussed upstream anyway).
+
+ -- Cyril Brulebois Mon, 21 Feb 2011 04:27:15 +0100
+
+xserver-xorg-input-synaptics (1.3.0-2) unstable; urgency=low
+
+ * Switch to Architecture: any, adding armhf support (Closes: #604672).
+ * Switch to dh:
+ - Use debhelper 8.
+ - Use dh-autoreconf.
+ - Bump xserver-xorg-dev build-dep for dh_xsf_substvars and xsf
+ debhelper sequence.
+ * Remove xsfbs accordingly.
+ * Get rid of xfree86-* packages in Conflicts/Replaces/Provides.
+ * Bump Standards-Version to 3.9.1 (no changes needed).
+
+ -- Cyril Brulebois Sat, 05 Feb 2011 14:40:47 +0100
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu15) oneiric; urgency=low
+
+ * Also build-conflict with libxtst-dev as to make sure it's not present in
+ e.g. local debug builds.
+
+ -- Loïc Minier Fri, 10 Jun 2011 18:01:59 +0200
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu14) oneiric; urgency=low
+
+ * Drop libxtst-dev build dependency so syndaemon does not use XRecord,
+ preventing a wide range of crashes in _CallCallbacks. (LP: #774978)
+
+ -- Robert Hooker Mon, 23 May 2011 10:13:09 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu13) oneiric; urgency=low
+
+ * Re-add 116_resolution_detect_option.patch as 101_resolution_detect_option.patch:
+ - This patch was introduced in 1.2.2-2ubuntu7 but got erroneously dropped in the
+ merge for 1.3.99+git20110116.0e27ce3a-0ubuntu1.
+ (LP: #327428)
+
+ -- Bryce Harrington Fri, 20 May 2011 11:14:44 -0700
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu12) natty; urgency=low
+
+ * syndaemon: Drain spurious events from XRecord connection as a work around
+ for a buggy X server. This keeps syndaemon from busy looping
+ (LP: #754470)
+
+ -- Chase Douglas Thu, 14 Apr 2011 14:15:33 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu11) natty; urgency=low
+
+ * Fix jumpy cursor on multitouch trackpads (LP: #751525)
+ - Added 123_order_ProcessTouch_for_numFingers.patch
+
+ -- Chase Douglas Tue, 05 Apr 2011 11:03:12 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu10) natty; urgency=low
+
+ * Ensure touch mask exists before clearing it (LP: #747126)
+
+ -- Chase Douglas Fri, 01 Apr 2011 08:40:59 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu9) natty; urgency=low
+
+ * Fix handling for SemiMultitouch trackpads with integrated buttons
+ (LP: #736523)
+ - Added 119_active_area_touches.patch
+ - Added 120_active_touches_num_fingers.patch
+ - Added 121_semi-mt_num_fingers.patch
+ * Fix spurious right click events on some trackpads (LP: #742213)
+ - Added 122_revert_pressure_finger_default.patch
+
+ -- Chase Douglas Wed, 30 Mar 2011 10:54:50 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu8) natty; urgency=low
+
+ * Disable SemiMultitouch devices, we don't support them yet (LP: #723905)
+
+ -- Chase Douglas Tue, 15 Mar 2011 16:16:21 -0400
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu7) natty; urgency=low
+
+ * Set event window correctly for global gesture event
+ (LP: #728696)
+
+ -- Chase Douglas Fri, 04 Mar 2011 15:40:43 -0500
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu6) natty; urgency=low
+
+ * Fix silly typo in patch name
+
+ -- Bryce Harrington Wed, 02 Mar 2011 13:06:17 -0800
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu5) natty; urgency=low
+
+ * Add 118_quell_error_msg.patch: Don't print error "Unable to find a
+ synaptics device" when used on system that doesn't have a touchpad anyway.
+ (LP: #716712)
+ * Renumber patches 200 and 201 to 116 and 117 so are consistent with the
+ other ubuntu patches.
+
+ -- Bryce Harrington Wed, 02 Mar 2011 12:16:32 -0800
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu4) UNRELEASED; urgency=low
+
+ * Add in xi 2.1 support and uTouch gesture support
+ - Added 200_xi2.1.patch
+ - Added 201_gestures.patch
+ - Add depends on libmtdev and libutouch-grail
+
+ -- Chase Douglas Sun, 20 Feb 2011 19:23:11 -0500
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu3) natty; urgency=low
+
+ * debian/control: Bump build-depend on xserver-xorg-dev to really, really
+ build against Xserver 1.10
+
+ -- Christopher James Halse Rogers Tue, 01 Feb 2011 20:46:57 +1100
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu2) natty; urgency=low
+
+ * Rebuild against Xserver 1.10
+
+ -- Bryce Harrington Mon, 31 Jan 2011 18:37:55 -0800
+
+xserver-xorg-input-synaptics (1.3.99+git20110116.0e27ce3a-0ubuntu1) natty; urgency=low
+
+ [ Cyril Brulebois ]
+ * Switch to Architecture: any, adding armhf support (Closes: #604672).
+
+ [ Christopher James Halse Rogers ]
+ * Merge from (unreleased) Debian experimental. Remaining Ubuntu changes:
+ - Split out our synaptics quirks into 51-synaptics-quirks.conf
+ - Add the udev rule back for tagging specific machines to be quirked
+ - Trigger udev in postinst to pick up udev rules
+ - add Depend: on udev
+ - 103_enable_cornertapping.patch: Enable right/middle clicks by
+ tapping in the bottom- and top-right corners.
+ - 104_always_enable_tapping.patch: Enable tapping regardless of the
+ presence of physical buttons.
+ - 106_always_enable_vert_edge_scroll.patch: Enable vertical edge
+ tapping by default even if we enable two-finger scrolling as well.
+ - 114_jumpy_cursor_first_part.patch: Adds a property to enable filtering
+ jumpy cursor problems on some machines.
+ - Specify ‘ubuntu’ branch in gbp.conf
+ - 115_evdev_only.patch: Only bind to /dev/input/event* evdev devices
+ (LP 624985)
+ * Update to git snapshot to fix build against Xserver 1.10 input API
+ * debian/patches/01-synaptics-dont-grab-if-not-on-current-VT.patch:
+ - Refresh for new upstream.
+ * debian/patches/114_jumpy_cursor_first_part.patch:
+ - Refresh for new upstream. Drop the multi-touch chunk of the quirk,
+ as that is handled by upstream commit a6ca4d25.
+
+ -- Christopher James Halse Rogers Tue, 25 Jan 2011 20:01:58 +1100
+
+xserver-xorg-input-synaptics (1.3.0-1) experimental; urgency=low
+
+ [ Robert Hooker ]
+ * New upstream release.
+ * Bump xutils-dev requirement for new util-macros.
+
+ [ Cyril Brulebois ]
+ * Remove TODO from xserver-xorg-input-synaptics.docs, dropped upstream.
+
+ -- Cyril Brulebois Fri, 19 Nov 2010 23:49:14 +0100
+
+xserver-xorg-input-synaptics (1.2.2-4) experimental; urgency=low
+
+ * Merge xsfbs to get unversioned Provides.
+
+ -- Cyril Brulebois Sat, 16 Oct 2010 14:40:22 +0200
+
+xserver-xorg-input-synaptics (1.2.2-3) experimental; urgency=low
+
+ [ Mattia Dongili ]
+ * add dependency to libxtst-dev to enable XRecord support in
+ syndaemon (closes: #598834).
+
+ [ Cyril Brulebois ]
+ * Build against Xserver 1.9.1 rc1.
+
+ -- Cyril Brulebois Wed, 13 Oct 2010 00:26:45 +0200
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu7) natty; urgency=low
+
+ * Add 116_resolution_detect_option.patch: Provide an option to prevent
+ synaptics from communicating the touchpad size to the xserver. This
+ can be used to solve problems where differences in touchpad and screen
+ dimensions cause the mouse pointer to skip pixels when moving.
+ (LP: #327428)
+
+ -- Bryce Harrington Wed, 01 Dec 2010 17:03:44 -0800
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu6) natty; urgency=low
+
+ * Add quirk for Dell Inspiron 6400 to register taps more reliably.
+ The touchpad hardware occasionally sends invalid (1, 5855) coords
+ for taps, which the driver then interprets as a corner tap, which
+ by default get ignored. Instead of ignoring them, we treat them
+ as left-button clicks.
+ (LP #133060)
+
+ -- Bryce Harrington Wed, 01 Dec 2010 12:32:39 -0800
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu5) maverick; urgency=low
+
+ * 115_evdev_only.patch was added but never applied. (LP: #624985)
+
+ -- Chase Douglas Sat, 18 Sep 2010 15:19:21 +0200
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu4) maverick; urgency=low
+
+ [Chase Douglas]
+ * 115_evdev_only.patch:
+ - Prevent non-evdev devices from firing the eventcomm AutoDevProbe callback
+ (LP: #624985)
+
+ -- Bryce Harrington Wed, 15 Sep 2010 16:27:29 -0700
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu3) maverick; urgency=low
+
+ * Rebuild against new Xserver 1.9 ABI
+
+ -- Christopher James Halse Rogers Mon, 09 Aug 2010 21:47:56 +1000
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu2) maverick; urgency=low
+
+ * 51-synaptics-quirks.conf, 66-xorg-synaptics.rules:
+ - Put back quirk for Inspiron 1120 which was probably lost in a merge.
+
+ -- Alberto Milone Fri, 06 Aug 2010 12:26:59 +0200
+
+xserver-xorg-input-synaptics (1.2.2-2ubuntu1) maverick; urgency=low
+
+ [ Robert Hooker ]
+ * Merge from debian unstable, remaining changes:
+ - Split out our synaptics quirks into 51-synaptics-quirks.conf
+ - Add the udev rule back for tagging specific machines to be quirked
+ - 103_enable_cornertapping.patch: Enable right/middle clicks by
+ tapping in the bottom- and top-right corners.
+ - 104_always_enable_tapping.patch: Enable tapping regardless of the
+ presence of physical buttons.
+ - 106_always_enable_vert_edge_scroll.patch: Enable vertical edge
+ tapping by default even if we enable two-finger scrolling as well.
+ - 114_jumpy_cursor_first_part.patch: Adds a property to enable filtering
+ jumpy cursor problems on some machines.
+ * Add a dependency on udev.
+
+ [ Christopher James Halse Rogers ]
+ * debian/gbp.conf:
+ - Make git-buildpackage less annoying by specifying “ubuntu” as our debian
+ branch.
+
+ -- Robert Hooker Mon, 07 Jun 2010 19:07:59 -0400
+
+xserver-xorg-input-synaptics (1.2.2-2) unstable; urgency=low
+
+ * Cherry-pick patch from upstream git to add the xorg.conf.d snippet.
+ * Replace our local copy with that one.
+ * Build-Depend on new xserver-xorg-dev, which lets us install the snippet to
+ /usr/share/X11/xorg.conf.d.
+ * Drop postinst, we don't need to trigger udev anymore.
+ * Sanitize installation of manpage into the package.
+ * Update to new xsfbs, use ${xinpdriver:Depends} in debian/control.
+ * Drop dependency on udev, since we have no udev rules or trigger.
+
+ [ Cyril Brulebois ]
+ * Add myself to Uploaders.
+ * Bump Standards-Version from 3.8.3 to 3.8.4 (no changes needed).
+
+ -- Cyril Brulebois Sat, 17 Apr 2010 17:48:26 +0200
+
+xserver-xorg-input-synaptics (1.2.2-1ubuntu2) lucid; urgency=low
+
+ * 10-synaptics.conf: Use 'MatchDevicePath "/dev/input/event*"'.
+
+ -- Timo Aaltonen Thu, 01 Apr 2010 14:34:20 +0300
+
+xserver-xorg-input-synaptics (1.2.2-1ubuntu1) lucid; urgency=low
+
+ * Merge from Debian unstable. (LP: #546933)
+ * Rewrite old quirks to use ID_INPUT.tags.
+
+ -- Timo Aaltonen Wed, 31 Mar 2010 00:27:07 +0300
+
+xserver-xorg-input-synaptics (1.2.2-1) unstable; urgency=low
+
+ [ Timo Aaltonen ]
+ * New upstream release.
+ * Add xserver-xorg-input-synaptics-dev for the header and .pc files.
+ (LP: #340340)
+ * Run udevadm trigger on postinst, and depend on udev [linux-any].
+ * Add 10-synaptics.conf.
+ * Drop Ubuntu specific quirks from the udev rules, add a placeholder.
+
+ [ Julien Cristau ]
+ * Add hurd-i386 to the Architecture field. Requested by Samuel Thibault.
+ * Drop references to hal from debian/NEWS, README.Debian and synaptics(4)
+ (closes: #564549).
+ * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
+ good reason. Thanks, Colin Watson!
+
+ [ Brice Goglin ]
+ * Fix reference to the synaptics manpage in README.Debian,
+ closes: #568628.
+
+ -- Timo Aaltonen Tue, 30 Mar 2010 21:51:15 +0300
+
+xserver-xorg-input-synaptics (1.2.1-1) unstable; urgency=low
+
+ [ Timo Aaltonen ]
+ * New upstream release.
+
+ [ Cyril Brulebois ]
+ * Add ${misc:Depends} to Depends.
+ * Remove hardcoded libxi6 from Depends, and wrap them.
+ * Upload to unstable.
+
+ -- Cyril Brulebois Fri, 08 Jan 2010 00:55:04 +0100
+
+xserver-xorg-input-synaptics (1.2.0-3ubuntu1) lucid; urgency=low
+
+ * Merge from Debian experimental, remaining changes:
+ - 103_enable_cornertapping.patch: Enable right/middle clicks by
+ tapping in the bottom- and top-right corners.
+ - 104_always_enable_tapping.patch: Enable tapping regardless of the
+ presence of physical buttons.
+ - 106_always_enable_vert_edge_scroll.patch: Enable vertical edge
+ tapping by default even if we enable two-finger scrolling as well.
+ * Disabled until fixed to apply and work:
+ - 114_jumpy_cursor_first_part.patch
+ * Dropped, using udev now:
+ - 115_jumpy_cursor_second_part.patch
+
+ -- Timo Aaltonen Mon, 07 Dec 2009 22:58:38 +0200
+
+xserver-xorg-input-synaptics (1.2.0-3) experimental; urgency=low
+
+ [ Julien Cristau ]
+ * Install an udev rule instead of an fdi file on linux.
+ * Build against xserver 1.7 (closes: #549109).
+ * Add sh4 and kfreebsd-{amd64,i386} to the arch list (closes: #557881,
+ #559401).
+
+ [ Cyril Brulebois ]
+ * Upload to experimental.
+
+ -- Cyril Brulebois Sat, 05 Dec 2009 21:27:48 +0100
+
+xserver-xorg-input-synaptics (1.2.0-2) unstable; urgency=low
+
+ [ Mattia Dongili ]
+ * Negate the match on keyboard capabilities in the default fdi file
+ (closes: #557252).
+
+ -- Mattia Dongili Sat, 21 Nov 2009 13:00:37 +0900
+
+xserver-xorg-input-synaptics (1.2.0-1) unstable; urgency=low
+
+ [ Mattia Dongili ]
+ * Finally package the new upstream release.
+ * Remove 02-mention-tapping-in-manpage-notes.patch now included upstream.
+ * All the SHM code has been removed from synclient and syndaemon
+ (closes: 523652 and closes: 534333 and also closes: #548357). Also add a
+ note in the NEWS file.
+ * Do not use the synaptics driver for devices advertising keyboard
+ capabilities (closes: 524130).
+ * Refresh patch 01-synaptics-dont-grab-if-not-on-current-VT.patch.
+ * Add versioned Build-Depends on libxi-dev (closes: #538299).
+ * The driver now handles duplicate configuration in both an fdi file and
+ xorg.conf, see http://bugs.freedesktop.org/show_bug.cgi?id=24814
+ (closes: #532995).
+ * Make lintian happier: update Standard-Version and debhelper dependency.
+
+ -- Mattia Dongili Thu, 19 Nov 2009 21:24:49 +0900
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu7) karmic; urgency=low
+
+ * debian/patches:
+ - 115_jumpy_cursor_second_part.patch: Set AreaBottomEdge to
+ 4100 for Inspiron 1011 and Inspiron 1012.
+
+ -- Alberto Milone Wed, 14 Oct 2009 16:55:16 +0200
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu6) karmic; urgency=low
+
+ * debian/patches:
+ - Split 114_jumpy_cursor_threshold.patch into
+ 114_jumpy_cursor_first_part.patch and
+ 115_jumpy_cursor_second_part.patch so as to keep options
+ which belong in the fdi file separate from the code.
+ - 115_jumpy_cursor_second_part.patch:
+ + Add quirk for Inspiron 1012.
+ - Remove 114_jumpy_cursor_threshold.patch_old.
+
+ -- Alberto Milone Mon, 05 Oct 2009 12:09:14 +0200
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu5) karmic; urgency=low
+
+ * Add lpia to the list of Architectures. LP: #413579.
+
+ -- Steve Langasek Mon, 07 Sep 2009 10:44:54 -0700
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu4) karmic; urgency=low
+
+ * debian/patches:
+ - 112_jumpy_cursor_quirks.patch:
+ + Drop patch.
+ - 114_jumpy_cursor_threshold.patch:
+ + Replace 112_jumpy_cursor_quirks.patch.
+ + Make the threshold an XInput property.
+ + Add quirk for Dell Mini10v and for HP Mini 1000 in the
+ fdi file.
+
+ -- Alberto Milone Wed, 02 Sep 2009 10:44:28 +0200
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu3) karmic; urgency=low
+
+ * debian/patches:
+ - 112_jumpy_cursor_quirks.patch: Make sure that the quirk
+ affects only the Dell Mini 10v (LP: #405943).
+ - 103_enable_cornertapping.patch: Don't trigger middle click
+ when tapping on the top right corner button (LP: #386017).
+
+ -- Alberto Milone Mon, 17 Aug 2009 10:31:14 +0200
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu2) karmic; urgency=low
+
+ * debian/patches:
+ - 105_correct_multifinger_click.patch: Drop patch as it breaks
+ the expected behavior for multitouch clicking (LP: #320585).
+ - 111_add_active_area.patch: Backport "Synaptics Area" property
+ from upstream (LP: #402863).
+ - 112_jumpy_cursor_quirks.patch: Add Quirk for Dell Mini 10v
+ touchpad (LP: #402863).
+ - 113_add_capabilities.patch: Backport read-only "Synaptics
+ Capabilities" property from upstream.
+
+ -- Alberto Milone Wed, 22 Jul 2009 10:42:11 +0200
+
+xserver-xorg-input-synaptics (1.1.2-1ubuntu1) karmic; urgency=low
+
+ * Merge from Debian unstable, Remaining changes:
+ - Restore the Ubuntu patch series. (LP: #378391)
+ - 103_enable_cornertapping.patch: Enable right/middle clicks by
+ tapping in the bottom- and top-right corners.
+ - 104_always_enable_tapping.patch: Enable tapping regardless of the
+ presence of physical buttons.
+ - 105_correct_multifinger_click.patch: Swap the right/middle clicks
+ generated by multi-finger tapping.
+ - 106_always_enable_vert_edge_scroll.patch: Enable vertical edge
+ tapping by default even if we enable two-finger scrolling as well.
+ - 110_remove_bound_auto_adjust.patch: Don't auto-adjust to bounds of
+ the hardware scroll area.
+
+ -- Robert Hooker (Sarvatt) Sun, 28 Jun 2009 18:13:52 -0400
+
+xserver-xorg-input-synaptics (1.1.2-1) unstable; urgency=low
+
+ [ Mattia Dongili ]
+ * New upstream release.
+ * Replace 02-mention-tapping-in-manpage-notes.patch with the patch accepted
+ upstream (1f499d).
+ * Refresh patch 01-synaptics-dont-grab-if-not-on-current-VT.patch.
+ * Update README.Debian's date signature with the last modification time
+ (closes: #531999).
+
+ -- Mattia Dongili Sat, 06 Jun 2009 13:32:59 +0900
+
+xserver-xorg-input-synaptics (1.1.1~git20090510-1) unstable; urgency=low
+
+ [ David Nusinow ]
+ * Add NEWS.Debian entry about enabling tapping again (closes: #497523)
+
+ [ Mattia Dongili ]
+ * Link to xserver-xorg reportbug script
+ * Merge current upstream fixes:
+ - Edge calculation fixes bring back vertical scrolling (closes: #523946)
+ - Fix float properties handling on 64bit arches (closes: #525473)
+ * Remove Suggests for [kq]synaptics which are not in the repository anymore
+ (closes: #498299) and suggest gpointing-device-settings (replacement of
+ gsynaptics) and touchfreeze instead
+ * Remove the upstream NEWS file which doesn't exist anymore
+ * Updates to the README.Debian to make sure we mention how to customize the
+ fdi configuration
+
+ -- Mattia Dongili Mon, 11 May 2009 23:08:15 +0900
+
+xserver-xorg-input-synaptics (1.1.0-1) unstable; urgency=low
+
+ * New upstream release.
+ * Upload to unstable.
+
+ -- Julien Cristau Thu, 09 Apr 2009 01:34:19 +0100
+
+xserver-xorg-input-synaptics (0.99.3-3) experimental; urgency=low
+
+ [ Julien Cristau ]
+ * Get rid of the xfree86-driver-synaptics transitional package. It was
+ already a transitional package in etch.
+
+ [ Timo Aaltonen ]
+ * Rename the source package to xserver-xorg-input-synaptics, since
+ it's hosted on freedesktop now and to be consistent with the rest
+ of the input drivers.
+
+ -- Julien Cristau Mon, 26 Jan 2009 09:08:10 +0100
+
+xfree86-driver-synaptics (0.99.3-2ubuntu4) jaunty; urgency=low
+
+ * debian/patches/110_remove_bound_auto_adjust.patch:
+ - Small change to make sure that the driver does not
+ auto-adjust to the bounds of the hardware scroll area
+ as this causes problem to the touchpads of Acer Aspire
+ One units (LP: #320632).
+
+ -- Alberto Milone Thu, 26 Mar 2009 17:00:52 +0100
+
+xfree86-driver-synaptics (0.99.3-2ubuntu3) jaunty; urgency=low
+
+ * debian/patches/109_override_alps_settings.patch:
+ - Add customised settings for ALPS touchpad (LP: #320632):
+ o Enable vertTwoFingerScroll by default.
+ o Set RightEdge to 900.
+ o Set ClickTime to 0.
+ o Set SingleTapTimeout to 0.
+ o Set MinSpeed to 0.45.
+ o Set MaxSpeed to 0.75.
+ * debian/patches/107_reduce_cursor_speed.patch:
+ - drop and merge with 109_override_alps_settings.patch.
+
+ -- Alberto Milone (tseliot) Sat, 28 Feb 2009 10:20:08 +0100
+
+xfree86-driver-synaptics (0.99.3-2ubuntu2) jaunty; urgency=low
+
+ [Alberto Milone]
+ * debian/patches/105_always_enable_multifinger_click.patch:
+ - Drop patch
+ * debian/patches/105_correct_multifinger_click.patch:
+ - Fix inverted buttons
+ - Restore ability to drag and drop with physical buttons
+ (LP: #320632)
+
+ -- Alberto Milone (tseliot) Sat, 31 Jan 2009 18:48:37 +0100
+
+xfree86-driver-synaptics (0.99.3-2ubuntu1) jaunty; urgency=low
+
+ * Merge from Debian experimental.
+ * Revive syndaemon_xinput_props.patch, now refreshed as 108.
+ Thanks to John S. Gruber for noticing it was dropped in haste.
+ (LP: #321355)
+
+ -- Timo Aaltonen Mon, 26 Jan 2009 09:57:07 +0200
+
+xfree86-driver-synaptics (0.99.3-2) experimental; urgency=low
+
+ * Update our copy of xsfbs to get a fixed serverabi rule and generate
+ Provides/Depends correctly.
+ * Refresh patch 01-synaptics-dont-grab-if-not-on-current-VT.patch.
+
+ -- Julien Cristau Mon, 26 Jan 2009 04:43:08 +0100
+
+xfree86-driver-synaptics (0.99.3-1ubuntu2) jaunty; urgency=low
+
+ [ Alberto Milone (tseliot) ]
+ * 103_enable_cornertapping.patch:
+ - Update patch for the new upstream release. (LP: #320632)
+ * 104_always_enable_tapping.patch:
+ - Enable tapping even when a physical left button is available. (LP: #320585)
+ * 105_always_enable_multifinger_click.patch:
+ - Enable multifinger click (where available) even when physical right/middle
+ buttons are available. (LP: #320585)
+ * 106_always_enable_vert_edge_scroll.patch:
+ - Enable scrolling even when doubletap is available. (LP: #320632)
+ * 107_reduce_cursor_speed.patch:
+ - Reduce the cursor speed. (LP: #320639)
+
+ -- Timo Aaltonen Sat, 24 Jan 2009 20:29:04 +0200
+
+xfree86-driver-synaptics (0.99.3-1ubuntu1) jaunty; urgency=low
+
+ * Merge from Debian experimental.
+ * Drop obsolete patches:
+ -101_no_horizscroll.patch
+ -102_dont_check_abi.diff
+ -104_syndaemon_xinput_props.patch
+ -105_no_bcm5974_shmconfig.patch
+ * Update 103_enable_cornertapping.patch to apply.
+
+ -- Timo Aaltonen Fri, 23 Jan 2009 14:30:34 +0200
+
+xfree86-driver-synaptics (0.99.3-1) experimental; urgency=low
+
+ [ Timo Aaltonen ]
+ * Run autoreconf at build time; build-depend on automake, libtool and
+ xutils-dev.
+
+ [ Julien Cristau ]
+ * Add watch file.
+ * New upstream release.
+ * Build against xserver 1.6 rc1.
+ * Handle parallel builds.
+
+ -- Julien Cristau Wed, 21 Jan 2009 22:27:10 +0100
+
+xfree86-driver-synaptics (0.15.2-0ubuntu5) intrepid; urgency=low
+
+ * Cherry-picked commit db6e63, "Return correctly on successful property
+ setting"
+ * debian/patches/104_syndaemon_xinput_props.patch: Add support for XInput
+ device properties to syndaemon.
+ * debian/patches/105_no_bcm5974_shmconfig.patch: Remove the SHMConfig
+ enabling line from the bcm5974 section of the fdi file. (LP: #282004)
+
+ -- William Grant Mon, 13 Oct 2008 21:48:05 +1100
+
+xfree86-driver-synaptics (0.15.2-0ubuntu4) intrepid; urgency=low
+
+ * Cherry-picked commit 355e845, "Adjust to new property API".
+ (LP: #274728)
+ * Refresh patches 101 & 102.
+ * Bump the build-dep on libxi-dev and xserver-xorg-dev.
+
+ -- Timo Aaltonen Mon, 29 Sep 2008 10:23:16 +0300
+
+xfree86-driver-synaptics (0.15.2-0ubuntu3) intrepid; urgency=low
+
+ * Also build for lpia; LP: #275158.
+
+ -- Loic Minier Sat, 27 Sep 2008 16:11:42 +0200
+
+xfree86-driver-synaptics (0.15.2-0ubuntu2) intrepid; urgency=low
+
+ [ Alberto Milone ]
+ * 103_enable_cornertapping.patch:
+ - Revert some defaults back to previous values, to fix corner tapping
+ and MaxTapMove. (LP: #271823)
+
+ -- Timo Aaltonen Tue, 23 Sep 2008 10:46:44 +0300
+
+xfree86-driver-synaptics (0.15.2-0ubuntu1) intrepid; urgency=low
+
+ * New upstream release. (LP: #262276, #268071, #247433, #262305)
+ * Drop 101_ubuntu.diff, superseded by input properties.
+ * Drop 103_fix_off_by_one.diff, applied upstream.
+ * 101_no_horizscroll.patch:
+ - Disable horizontal scrolling by defaulting to FALSE instead of changing
+ the fdi file.
+ * 102_dont_check_abi.diff:
+ - Remove one more check from src/synaptics.c, which was added recently.
+
+ -- Timo Aaltonen Fri, 12 Sep 2008 01:32:57 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1ubuntu5) intrepid; urgency=low
+
+ * Rebuild to fix dependency against xserver-xorg-core.
+
+ -- Timo Aaltonen Wed, 03 Sep 2008 17:45:20 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1ubuntu4) intrepid; urgency=low
+
+ * Run autoreconf at build time; build-depend on automake, libtool and
+ xutils-dev.
+ * Enable 102 again, since the problem with it was that Makefile.in was
+ not regenerated.
+ * Add 103_fix_off_by_one.diff to fix the number of arguments for
+ properties. Thanks William Grant!
+ * Pull 3d39926875446e from upstream/master:
+ - Re-enable TapButtons and CornerButtons to work by default.
+ (LP: #262292)
+
+ -- Timo Aaltonen Sat, 30 Aug 2008 18:20:14 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1ubuntu3) intrepid; urgency=low
+
+ * Disable 102 for now, since the property stuff doesn't seem to be
+ working right. (LP: #262986)
+
+ -- Timo Aaltonen Sat, 30 Aug 2008 16:52:51 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1ubuntu2) intrepid; urgency=low
+
+ * 102_dont_check_abi.diff:
+ - Don't check ABI_MAJOR, since we have all that's needed for
+ properties.
+
+ -- Timo Aaltonen Sat, 30 Aug 2008 13:27:54 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1ubuntu1) intrepid; urgency=low
+
+ * Merge from Debian experimental, remaining changes:
+ - debian/control:
+ + Drop the dummy package
+ + Change the maintainer address
+ - debian/patches:
+ 101_ubuntu.diff
+ + Various fixes, split this.
+ - fdi/11-x11-synaptics.fdi
+ + Modify to disable horizontal scrolling like our dexconf used to do.
+ * Pull in support for input properties.
+ * Drop 102_polling.diff, since it's upstream.
+
+ -- Timo Aaltonen Thu, 28 Aug 2008 02:09:47 +0300
+
+xfree86-driver-synaptics (0.15.0+git20080820-1) experimental; urgency=low
+
+ * Update to latest upstream git
+ * Remove patches merged upstream:
+ - 02-scandir-dev-input.patch
+ - 03-escape-dashes-in-manpages.patch
+ - 04-delibcwrap.patch
+ * Update debian/rules (taken from the evdev driver) for the autotoolized build
+ * Refresh 01-synaptics-dont-grab-if-not-on-current-VT.patch
+ * Cherry pick appletouch support from upstream
+
+ -- Mattia Dongili Sun, 24 Aug 2008 17:44:12 +0900
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.2) experimental; urgency=low
+
+ * Build against xserver 1.5 rc5.
+
+ -- Julien Cristau Mon, 14 Jul 2008 16:14:31 +0200
+
+xfree86-driver-synaptics (0.14.7~git20070706-3) unstable; urgency=low
+
+ * Add appletouch support in the fdi file (Closes: #495799).
+ * Install the fdi file with 0644 permissions.
+ * Updated xserver-xorg-input-synaptics.README.Debian to mention automatic
+ configuration and show a clearer example for the Server (manual)
+ configuration (Closes: #443995 and also Closes: #492120).
+
+ -- Mattia Dongili Wed, 27 Aug 2008 23:05:42 +0900
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1.lenny1) unstable; urgency=low
+
+ * Add 10-synaptics.fdi, installed in /usr/share/hal/fdi/policy/20thirdparty,
+ to get the driver loaded automatically if a touchpad is detected
+ (closes: #464662).
+ * Add patch from xorg git to fix usage of the EVIOCGBIT ioctl()
+ (closes: #493101).
+
+ -- Julien Cristau Mon, 18 Aug 2008 01:41:39 +0200
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1ubuntu4) intrepid; urgency=low
+
+ * Fix the fdi file to disable horizontal scrolling like dexconf used
+ to do.
+
+ -- Timo Aaltonen Mon, 18 Aug 2008 16:27:30 +0300
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1ubuntu3) intrepid; urgency=low
+
+ * Enable input-hotplug: install 10-synaptics.fdi in
+ /usr/share/hal/fdi/policy/20thirdparty.
+
+ -- Timo Aaltonen Fri, 01 Aug 2008 09:58:32 +0300
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1ubuntu2) intrepid; urgency=low
+
+ * Rebuild against the new xserver-xorg-dev.
+
+ -- Timo Aaltonen Mon, 07 Jul 2008 17:45:08 +0300
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1ubuntu1) intrepid; urgency=low
+
+ * Merge from debian unstable, remaining changes:
+ - Rename the source
+ - debian/control:
+ + Drop the dummy package
+ + Change the maintainer address.
+ + Add quilt to build-deps.
+ - Makefile: Add -fno-stack-protector.
+ - debian/patches:
+ 100_fix_vt_handling.diff
+ + Something is opening the device even after we've switched away
+ from the VT. The easiest way to handle this is to refuse to open
+ unless we're on the current VT.
+ 101_ubuntu.diff
+ + Various fixes, split this.
+ 102_polling.diff
+ + Added a patch which increases the polling timeout to save some
+ battery life
+
+ -- Bryce Harrington Mon, 09 Jun 2008 22:27:20 -0700
+
+xfree86-driver-synaptics (0.14.7~git20070706-2.1) unstable; urgency=low
+
+ * Non-maintainer upload, with Mattia's agreement.
+ * Add patch to fix the build with xserver 1.5, which removed the libc
+ wrapper (closes: #471494).
+ * Add armel and armeb to the Architecture field (closes: #461551).
+
+ -- Julien Cristau Mon, 02 Jun 2008 12:21:39 +0200
+
+xfree86-driver-synaptics (0.14.7~git20070706-2) unstable; urgency=low
+
+ * 01-synaptics-dont-grab-if-not-on-current-VT.patch from Matthew Garrett in
+ Ubuntu's 0.14.6-0ubuntu10 (Closes: #437273)
+ * 02-scandir-dev-input.patch to scan all the event devices in /dev/input
+ (Closes: #455994)
+ * update xsfbs
+
+ -- Mattia Dongili Tue, 01 Jan 2008 12:38:13 +0900
+
+xfree86-driver-synaptics (0.14.7~git20070706-1ubuntu4) hardy; urgency=low
+
+ * 102_polling.diff:
+ - Added a patch which increases the polling timeout to save some
+ battery life (LP: #184398).
+
+ -- Timo Aaltonen Wed, 27 Feb 2008 11:58:01 +0200
+
+xfree86-driver-synaptics (0.14.7~git20070706-1ubuntu3) hardy; urgency=low
+
+ * debian/patches/101_ubuntu.diff:
+ - extend to support disabling the touchpad
+ - remove unused bits of the patch
+
+ -- Scott James Remnant Tue, 22 Jan 2008 13:40:07 +0000
+
+xfree86-driver-synaptics (0.14.7~git20070706-1ubuntu2) hardy; urgency=low
+
+ * Change the source name to match Debian.
+
+ -- Timo Aaltonen Fri, 11 Jan 2008 11:59:09 +0200
+
+xserver-xorg-input-synaptics (0.14.7~git20070706-1ubuntu1) hardy; urgency=low
+
+ * Merge with Debian unstable, remaining changes:
+ - Rename the source
+ - debian/control:
+ + Drop the dummy package
+ + Change the maintainer address.
+ + Add quilt to build-deps.
+ - Makefile: Add -fno-stack-protector.
+ - debian/patches:
+ 100_fix_vt_handling.diff
+ + Something is opening the device even after we've switched away
+ from the VT. The easiest way to handle this is to refuse to open
+ unless we're on the current VT.
+ 101_ubuntu.diff
+ + Various fixes, split this.
+
+ -- Timo Aaltonen Fri, 09 Nov 2007 02:23:16 +0200
+
+xfree86-driver-synaptics (0.14.7~git20070706-1) unstable; urgency=low
+
+ * build with xserver-xorg-core 1.4 (Closes: #442314)
+ * update to current git
+ * update xsfbs
+
+ -- Mattia Dongili Mon, 17 Sep 2007 15:25:56 +0900
+
+xfree86-driver-synaptics (0.14.7~git20070517-2) unstable; urgency=low
+
+ * use xsfbs to build the driver and automagically get xserver-xorg deps
+ (Closes: #425818)
+
+ -- Mattia Dongili Thu, 31 May 2007 14:17:31 +0900
+
+xfree86-driver-synaptics (0.14.7~git20070517-1) unstable; urgency=low
+
+ * git snapshot of the driver:
+ - from commit e6595886d7ae3a1730cd0d9f86fd0f305c0743c2
+ "[...] synaptics, alps and appletouch pads all work approximately
+ identically without requiring model-specific configuration"
+ (Closes: #351621) (Closes: #406499)
+ - from commit 88211ca60be7cc74015ad4158722e5950884bd78
+ "Don't match wacom tablets in the event device probing."
+ (Closes: #383711)
+ - from commit 473912f50ffd2b26bd2f638f9d87f86cf60e2dd6
+ "Add a config option to prevent the driver from grabbing the event
+ device for exclusive use" (Closes: #380705)
+ - from commit 2d06ab1d2b3170b6fa44b945376b2ad4cd682af9
+ "Allow to easily switch between move and scroll"
+ (Closes: #411266)
+ * set Maintaner to the XSF and me as Uploader
+
+ -- Mattia Dongili Thu, 17 May 2007 19:34:22 +0900
+
+xfree86-driver-synaptics (0.14.6-2) unstable; urgency=low
+
+ * Build using Debian's xserver-xorg-dev instead of the package's
+ provided subtree (which is taken from XFree86-4.3.0).
+
+ -- Mattia Dongili Wed, 03 Jan 2007 18:38:40 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu10) gutsy; urgency=low
+
+ * Bodge around LP: #68370. Something is opening the device even after
+ we've switched away from the VT. The easiest way to handle this is
+ to refuse to open unless we're on the current VT.
+
+ -- Matthew Garrett Tue, 09 Oct 2007 21:08:23 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu9) gutsy; urgency=low
+
+ * Actually include the parameter setting code
+
+ -- Matthew Garrett Mon, 17 Sep 2007 17:56:53 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu8) gutsy; urgency=low
+
+ * Fix the build system so it works properly on 64-bit platforms
+ * Add initial support for setting some paramaters via X
+
+ -- Matthew Garrett Sun, 16 Sep 2007 18:18:17 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu7) feisty; urgency=low
+
+ * X and Y size calculations were inverted for edge scrolling
+ * Additionally, the values were scaled incorrectly (LP: #95858)
+
+ -- Matthew Garrett Sun, 25 Mar 2007 16:13:42 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu6) feisty; urgency=low
+
+ * Set defaults based on values the kernel gives us, rather than making stuff
+ up in an utterly miserable manner. This upload brought to you by Milton
+ Nero, a deeply flavoured oat stout.
+
+ -- Matthew Garrett Sat, 24 Mar 2007 15:08:26 +0000
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu5) feisty; urgency=low
+
+ * Attempt to set more reasonable defaults for appletouch devices. Better
+ now, but still not perfect.
+
+ -- Matthew Garrett Sat, 24 Mar 2007 02:44:11 +0000
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu4) feisty; urgency=low
+
+ * debian/control: Update maintainer fields according to debian-
+ maintainer-field spec.
+
+ -- Martin Pitt Mon, 12 Mar 2007 14:58:39 +0000
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu3) edgy; urgency=low
+
+ * Add the ugly ALPS hack back
+
+ -- Matthew Garrett Mon, 7 Aug 2006 22:55:42 +0100
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu2) edgy; urgency=low
+
+ * Disable Stack Protection for this package for now (module loading fails
+ due to missing symbols)
+
+ -- Rodrigo Parra Novo Mon, 31 Jul 2006 09:39:16 -0300
+
+xserver-xorg-input-synaptics (0.14.6-0ubuntu1) edgy; urgency=low
+
+ * New Upstream release
+ * New versioned Build-Depends on xserver-xorg-dev (>= 1.1.1)
+ * New versioned Build-Depends on xserver-xorg-core (>= 1.1.1)
+ * Fixed debian/rules to match current Makefile rules (based on Debian
+ xfree86-driver-synaptics package)
+ * Fixed Makefile and manual page, also based on Debian xfree86-driver-synaptics
+ * Dropped Alps patches - unfortunately they don't apply anymore
+
+ -- Rodrigo Parra Novo Thu, 27 Jul 2006 12:18:18 -0300
+
+xfree86-driver-synaptics (0.14.5-1) unstable; urgency=low
+
+ * New upstream release.
+ * Motion with pressure sensitivity merged upstream. (Closes: #337350)
+
+ -- Mattia Dongili Sun, 04 Jun 2006 19:45:35 +0200
+
+xfree86-driver-synaptics (0.14.4-5) unstable; urgency=low
+
+ * Added m68k to the Achitecture: field.
+
+ -- Mattia Dongili Sun, 30 Apr 2006 20:17:23 +0200
+
+xfree86-driver-synaptics (0.14.4-4) unstable; urgency=low
+
+ * Upload to unstable (Closes: #362108)
+ * Added xorg-driver-synaptics to the Provides, Conflicts,
+ Replaces list to ease Ubuntu mixed migrations (et al.)
+
+ -- Mattia Dongili Mon, 27 Mar 2006 18:16:48 +0200
+
+xfree86-driver-synaptics (0.14.4-3) experimental; urgency=low
+
+ * building the driver as a shared object, this fixes a lintian warning
+ and better fits in the modular xorg structure.
+
+ -- Mattia Dongili Wed, 22 Mar 2006 22:33:39 +0100
+
+xfree86-driver-synaptics (0.14.4-2) experimental; urgency=low
+
+ * New binary package name to follow modular xorg naming.
+ * Now suggesting the driver's graphical configuration tools.
+ * README.Debian: removed note about the 2.6.8 patch I removed recently.
+
+ -- Mattia Dongili Sun, 19 Mar 2006 17:01:09 +0100
+
+xfree86-driver-synaptics (0.14.4-1) unstable; urgency=low
+
+ * New upstream version.
+ * Upstream added an -K command line option to syndaemon to ignore
+ Modifier+AnyKey combos (closes: #335888).
+ * Removed the rediffed patch against Debian's 2.6.8 kernel.
+
+ -- Mattia Dongili Mon, 07 Nov 2005 22:54:40 +0100
+
+xserver-xorg-input-synaptics (0.14.3+seriouslythistime-0ubuntu4) dapper; urgency=low
+
+ * New versioned Build-Depends on xserver-xorg-dev (>= 1.1.1)
+ * New versioned Build-Depends on xserver-xorg-core (>= 1.1.1)
+
+ -- Rodrigo Parra Novo Thu, 27 Jul 2006 11:59:57 -0300
+
+xserver-xorg-input-synaptics (0.14.3+seriouslythistime-0ubuntu3) dapper; urgency=low
+
+ * Horrible workaround to avoid massive ALPS-related suckage
+
+ -- Matthew Garrett Wed, 22 Mar 2006 21:02:26 +0000
+
+xserver-xorg-input-synaptics (0.14.3+seriouslythistime-0ubuntu2) dapper; urgency=low
+
+ * Build with -fPIC to fix FTBFS
+
+ -- Tollef Fog Heen Wed, 11 Jan 2006 16:20:57 +0100
+
+xserver-xorg-input-synaptics (0.14.3+seriouslythistime-0ubuntu1) dapper; urgency=low
+
+ * Bounce straight back to 0.14.3.
+
+ -- Daniel Stone Tue, 25 Oct 2005 19:12:28 +1000
+
+xorg-driver-synaptics (0.14.3+revertedto+0.13.6-0ubuntu3) breezy; urgency=low
+
+ * Change dependency on xserver-xorg to -core (closes: Ubuntu#15902).
+
+ -- Daniel Stone Fri, 16 Sep 2005 17:42:34 +1000
+
+xorg-driver-synaptics (0.14.3+revertedto+0.13.6-0ubuntu2) breezy; urgency=low
+
+ * Build client utilities without includes from Xincludes.
+
+ -- Daniel Stone Wed, 7 Sep 2005 16:31:51 +1000
+
+xorg-driver-synaptics (0.14.3+revertedto+0.13.6-0ubuntu1) breezy; urgency=low
+
+ * Revert to old upstream version for preview at least, as the new was quite
+ catastrophically broken with ALPS. Fixed some, broke a lot (closes:
+ Ubuntu#14480).
+ * Backport the confused-finger-count patch.
+ * Hillariously, dpkg-source ignores deleted files, which means that
+ Xincludes stuff keeps getting resurrected. Change $(X_INCLUDES_ROOT) to
+ /usr in include paths (except for the server DDK) to ensure that we get
+ the installed headers, not the braindead included ones.
+
+ -- Daniel Stone Wed, 7 Sep 2005 11:07:06 +1000
+
+xorg-driver-synaptics (0.14.3-1ubuntu2) breezy; urgency=low
+
+ * Move to /usr/lib/xorg for the modular server, and build-depend on
+ xserver-xorg-dev.
+ * Switch dependency to xserver-xorg-core, version it.
+ * Start building synaptics_drv.so instead of .o.
+
+ -- Daniel Stone Fri, 2 Sep 2005 12:08:27 +1000
+
+xorg-driver-synaptics (0.14.3-1ubuntu1) breezy; urgency=low
+
+ * Merge with Debian.
+ * New upstream release:
+ + Fixes confused finger count with low pressure on some HPs (closes:
+ Ubuntu#14155).
+ * Remove unnecessary files in Xincludes from x11proto-core-dev and
+ x11proto-input-dev.
+
+ -- Daniel Stone Thu, 1 Sep 2005 16:24:27 +1000
+
+xfree86-driver-synaptics (0.14.3-1) unstable; urgency=low
+
+ * New upstream version.
+ * Updated README.Debian to reflect newer X.Org dependencies.
+
+ -- Mattia Dongili Fri, 22 Jul 2005 21:17:37 +0200
+
+xfree86-driver-synaptics (0.14.2-2) unstable; urgency=low
+
+ * Can now install together with xorg (closes: #318118).
+
+ -- Mattia Dongili Wed, 29 Jun 2005 12:00:00 +0200
+
+xfree86-driver-synaptics (0.14.2-1) unstable; urgency=low
+
+ * New upstream release.
+ * Added notes to README.Debian to run syndaemon from .xinitrc
+ (closes: #296485)
+
+ -- Mattia Dongili Wed, 18 May 2005 00:24:14 +0200
+
+xfree86-driver-synaptics (0.14.1-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Mattia Dongili Tue, 15 Mar 2005 22:33:25 +0100
+
+xfree86-driver-synaptics (0.14.0-1) unstable; urgency=low
+
+ * New upstream release:
+ - now correcly removes the shared memory segment when exiting X
+ (closes: #263382).
+
+ -- Mattia Dongili (ma.d.) Mon, 10 Jan 2005 21:14:44 +0100
+
+xfree86-driver-synaptics (0.13.6-2) unstable; urgency=low
+
+ * Install in /usr/X11R6/lib as all the xfree drivers on 64 bit archs. (closes: #280658)
+ * Provided an alternative patch for debian-kernel users. (closes: #282359)
+
+ -- Mattia Dongili (ma.d.) Sat, 18 Dec 2004 20:07:15 +0100
+
+xfree86-driver-synaptics (0.13.6-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Mattia Dongili (ma.d.) Sun, 24 Oct 2004 22:14:32 +0200
+
+xfree86-driver-synaptics (0.13.5-2) unstable; urgency=low
+
+ * Re-fixed synaptics_drv.o mode to 0644 (why did it reappear?).
+
+ -- Mattia Dongili (ma.d.) Thu, 19 Aug 2004 16:09:56 +0200
+
+xfree86-driver-synaptics (0.13.5-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Mattia Dongili (ma.d.) Sun, 08 Aug 2004 12:41:38 +0200
+
+xfree86-driver-synaptics (0.13.4-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Mattia Dongili (ma.d.) Tue, 27 Jul 2004 22:44:16 +0200
+
+xfree86-driver-synaptics (0.13.3-1) unstable; urgency=low
+
+ * New upstream.
+ * Fixed synaptics_drv.o mode to 0644.
+
+ -- Mattia Dongili (ma.d.) Thu, 20 Jun 2004 15:59:25 +0200
+
+xfree86-driver-synaptics (0.13.2-1) unstable; urgency=low
+
+ * New upstream.
+ * Fixed middle mouse button emulation. (closes: #247219)
+ * Fixed detection of ALPS touchpads when using a 2.6 linux kernel. (closes: #245682)
+ * Made double clicks faster. (closes: #248826)
+ * Uploaded with the correct upstream changelog. (closes: #248811)
+
+ -- Mattia Dongili (ma.d.) Tue, 11 May 2004 09:59:15 +0200
+
+xfree86-driver-synaptics (0.13.0-1) unstable; urgency=low
+
+ * New upstream.
+
+ -- Mattia Dongili (ma.d.) Tue, 27 Apr 2004 17:07:26 +0200
+
+xfree86-driver-synaptics (0.12.5-1) unstable; urgency=low
+
+ * New upstream. (closes: #239329)
+
+ -- Mattia Dongili (ma.d.) Sat, 20 Mar 2004 12:58:37 +0100
+
+xfree86-driver-synaptics (0.12.4-1) unstable; urgency=low
+
+ * Initial Release. (closes: #219163, #231763)
+
+ -- Mattia Dongili (ma.d.) Tue, 2 Mar 2004 11:42:05 +0100
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/NEWS
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/NEWS
@@ -0,0 +1,29 @@
+xserver-xorg-input-synaptics (1.2.0-1) unstable; urgency=low
+
+ * All the shared memory code has been removed from synclient and syndaemon.
+ The SHMConfig option is still available but the only use is for monitoring
+ the hardware state data.
+ If you have any script that changes the synaptics driver configuration
+ make sure that you don't use the -s option to synclient.
+
+ -- Mattia Dongili Fri, 20 Nov 2009 00:32:58 +0900
+
+xserver-xorg-input-synaptics (1.1.1~git20090510-1) unstable; urgency=low
+
+ * Tapping has been disabled by default on many touchpads by upstream, see
+ the "NOTES" section in the synaptics(4) manpage for a short overview
+ about how defaults are calculated.
+ If you want to re-enable it, you can do so from within the X
+ environment by running the following commands in a terminal:
+
+ $ synclient TapButton1=1
+ $ synclient TapButton2=2
+ $ synclient TapButton3=3
+
+ Note that the configuration will not be permanently modified, to do
+ so assign the above option values in your xorg.conf (see the synaptics(4)
+ manpage or the documents in /usr/share/doc/xserver-xorg-input-synaptics
+ for additional details). Another alternative is to use desktop
+ environment specific tools like gpointing-device-settings or touchfreeze.
+
+ -- David Nusinow Sat, 11 Apr 2009 16:23:11 -0400
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics.postinst.in
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics.postinst.in
@@ -0,0 +1,23 @@
+#!/bin/sh
+
+set -e
+
+THIS_PACKAGE=xserver-xorg-input-synaptics
+THIS_SCRIPT=postinst
+
+#INCLUDE_SHELL_LIB#
+
+case "$1" in
+ configure)
+ if dpkg --compare-versions "$2" lt 1.4.1-1ubuntu2; then
+ if [ `uname -s` = "Linux" ]; then
+ udevadm trigger --subsystem-match=input --action=change
+ fi
+ fi
+esac
+
+#DEBHELPER#
+
+exit 0
+
+# vim:set ai et sw=2 ts=2 tw=80:
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/rules
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/rules
@@ -0,0 +1,17 @@
+#!/usr/bin/make -f
+
+# Install in debian/tmp to retain control through dh_install:
+override_dh_auto_install:
+ dh_auto_install --destdir=debian/tmp
+
+# Kill *.la files, and forget no-one:
+override_dh_install:
+ find debian/tmp -name '*.la' -delete
+ dh_install --fail-missing
+
+# That's a plugin, use appropriate warning level:
+override_dh_shlibdeps:
+ dh_shlibdeps -- --warnings=6
+
+%:
+ dh $@ --with quilt,autoreconf,xsf --builddirectory=build/
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/xserver-xorg-input-synaptics.docs
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/xserver-xorg-input-synaptics.docs
@@ -0,0 +1,3 @@
+README
+docs/README.alps
+docs/trouble-shooting.txt
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/121_semi-mt_num_fingers.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/121_semi-mt_num_fingers.patch
@@ -0,0 +1,155 @@
+From 07af5bb64e1dae33ef463b71957564111aa532ab Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Tue, 29 Mar 2011 12:11:28 -0400
+Subject: [PATCH 3/3] Add fixes for semi-multitouch devices with integrated buttons
+
+Some machines, such as early Dell Mini series, have synaptics trackpads
+that provide semi-multitouch data and have integrated left and right
+buttons at the bottom of the trackpad. Special care must be taken to
+ensure these trackpads function correctly, otherwise a button press with
+one finger and a drag with another finger may end up sending a two
+finger scroll event.
+
+This patch implements the following:
+
+1. When the first or second touch begins on a semi-mt device, the touch
+ bounding box must be entirely in the trackpad active area or else the
+ active touch count is not incremented.
+2. The maximum active touch count is 2 for a semi-mt device, but more
+ fingers may be reported through BTN_*TAP events. If the active touch
+ count is 2, use the BTN_*TAP events for determining the number of
+ fingers on the touchpad. Otherwise, use the active touch count.
+
+Signed-off-by: Chase Douglas
+---
+ src/eventcomm.c | 59 +++++++++++++++++++++++++++++++++++++++++--------------
+ src/eventcomm.h | 5 ++++
+ 2 files changed, 49 insertions(+), 15 deletions(-)
+
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:55:10.801347676 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:55:12.731347678 +0300
+@@ -414,11 +414,6 @@
+ xf86Msg(X_PROBED, "%s: buttons:%s\n", pInfo->name, buf);
+ }
+
+- /* We don't support SemiMultitouch devices yet. */
+- SYSCALL(rc = ioctl(pInfo->fd, EVIOCGPROP(sizeof(prop)), &prop));
+- if (rc >= 0 && (prop & INPUT_PROP_SEMI_MT))
+- return;
+-
+ for (i = ABS_MT_TOUCH_MAJOR; i <= ABS_MT_PRESSURE; i++) {
+ if (!BitIsOn(ecpriv->absbits, i))
+ continue;
+@@ -432,6 +427,16 @@
+ ecpriv->mt_axis_map[i - ABS_MT_TOUCH_MAJOR] = ecpriv->num_mt_axes++;
+ priv->has_touch = TRUE;
+ }
++
++ if (priv->has_touch) {
++ /* We don't support SemiMultitouch devices yet. */
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGPROP(sizeof(prop)), &prop));
++ if (rc >= 0 && (prop & INPUT_PROP_SEMI_MT))
++ ecpriv->semi_mt = TRUE;
++ else
++ ecpriv->semi_mt = FALSE;
++ }
++
+ }
+
+ static Bool
+@@ -462,10 +467,11 @@
+ }
+
+ if (ecpriv->close_slot)
+- {
+- xf86PostTouchEvent(pInfo->dev,
+- ecpriv->mt_slot_map[ecpriv->cur_slot],
+- XI_TouchEnd, 0, ecpriv->touch_mask);
++ {
++ if (!ecpriv->semi_mt)
++ xf86PostTouchEvent(pInfo->dev,
++ ecpriv->mt_slot_map[ecpriv->cur_slot],
++ XI_TouchEnd, 0, ecpriv->touch_mask);
+ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
+ ecpriv->close_slot = FALSE;
+ ecpriv->active_touches--;
+@@ -479,17 +485,22 @@
+ int x = valuator_mask_get(ecpriv->touch_mask, x_axis);
+ int y = valuator_mask_get(ecpriv->touch_mask, y_axis);
+
+- if (is_inside_active_area(priv, x, y))
++ if ((!ecpriv->semi_mt && is_inside_active_area(priv, x, y)) ||
++ (ecpriv->semi_mt &&
++ (is_inside_active_area(priv, ecpriv->min_x, ecpriv->min_y) &&
++ (ecpriv->active_touches == 0 ||
++ is_inside_active_area(priv, ecpriv->max_x, ecpriv->max_y)))))
+ {
+- xf86PostTouchEvent(pInfo->dev,
+- ecpriv->mt_slot_map[ecpriv->cur_slot],
+- XI_TouchBegin, 0, ecpriv->touch_mask);
++ if (!ecpriv->semi_mt)
++ xf86PostTouchEvent(pInfo->dev,
++ ecpriv->mt_slot_map[ecpriv->cur_slot],
++ XI_TouchBegin, 0, ecpriv->touch_mask);
+ ecpriv->active_touches++;
+ }
+ else
+ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
+ }
+- else
++ else if (!ecpriv->semi_mt)
+ {
+ xf86PostTouchEvent(pInfo->dev,
+ ecpriv->mt_slot_map[ecpriv->cur_slot],
+@@ -544,7 +555,7 @@
+ case EV_SYN:
+ switch (ev->code) {
+ case SYN_REPORT:
+- if (priv->has_touch)
++ if (priv->has_touch && ecpriv->active_touches < 2)
+ hw->numFingers = ecpriv->active_touches;
+ else if (comm->oneFinger)
+ hw->numFingers = 1;
+@@ -676,6 +687,24 @@
+ valuator_mask_set(ecpriv->cur_vals,
+ ecpriv->mt_axis_map[ev->code - ABS_MT_TOUCH_MAJOR],
+ ev->value);
++
++ if (ecpriv->semi_mt)
++ {
++ if (ev->code == ABS_MT_POSITION_X)
++ {
++ if (ecpriv->cur_slot == 0)
++ ecpriv->min_x = ev->value;
++ else
++ ecpriv->max_x = ev->value;
++ }
++ else if (ev->code == ABS_MT_POSITION_Y)
++ {
++ if (ecpriv->cur_slot == 0)
++ ecpriv->min_y = ev->value;
++ else
++ ecpriv->max_y = ev->value;
++ }
++ }
+ }
+ break;
+ }
+Index: xserver-xorg-input-synaptics/src/eventcomm.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.h 2011-07-05 11:55:10.801347676 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.h 2011-07-05 11:55:12.731347678 +0300
+@@ -59,6 +59,11 @@
+ struct mtdev *mtdev;
+ struct grail *grail;
+ int active_touches;
++ Bool semi_mt;
++ int min_x;
++ int max_x;
++ int min_y;
++ int max_y;
+ } EventcommPrivate;
+
+ extern Bool EventProcessEvent(InputInfoPtr pInfo, struct CommData *comm,
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/129_disable_three_touch_tap.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/129_disable_three_touch_tap.patch
@@ -0,0 +1,11 @@
+--- a/src/synaptics.c
++++ b/src/synaptics.c
+@@ -633,7 +633,7 @@ static void set_default_parameters(Input
+ /* Enable tap */
+ tapButton1 = 1;
+ tapButton2 = 2;
+- tapButton3 = 3;
++ tapButton3 = 0; /* Disabled by default so three-touch gestures work */
+
+ /* Enable multifinger-click if only have one physical button,
+ otherwise clickFinger is always button 1. */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/02-do-not-use-synaptics-for-keyboards.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/02-do-not-use-synaptics-for-keyboards.patch
@@ -0,0 +1,60 @@
+do not use the synaptics driver for devices advertising themselves as keyboards
+http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=524130
+
+Index: xserver-xorg-input-synaptics/conf/11-x11-synaptics.fdi
+===================================================================
+--- xserver-xorg-input-synaptics.orig/conf/11-x11-synaptics.fdi 2009-11-21 13:15:39.064182104 +0900
++++ xserver-xorg-input-synaptics/conf/11-x11-synaptics.fdi 2009-11-21 13:16:23.404256090 +0900
+@@ -2,27 +2,31 @@
+
+
+
+- synaptics
+-
+-
++
++
++ synaptics
++
++
++
+
+
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/119_active_area_touches.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/119_active_area_touches.patch
@@ -0,0 +1,100 @@
+From 5c209f9bbb3a786b247ecbc613b7f27435dd3033 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Tue, 29 Mar 2011 10:17:27 -0400
+Subject: [PATCH 1/3] Don't process touches outside active area
+
+Signed-off-by: Chase Douglas
+---
+ src/eventcomm.c | 28 ++++++++++++++++++++++++----
+ src/synaptics.c | 2 +-
+ src/synproto.h | 2 ++
+ 3 files changed, 27 insertions(+), 5 deletions(-)
+
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:55:02.771347676 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:55:08.771347676 +0300
+@@ -455,7 +455,11 @@
+
+ if (!priv->has_touch || ecpriv->cur_slot < 0 ||
+ ecpriv->mt_slot_map[ecpriv->cur_slot] == (uint32_t)-1)
++ {
++ if (ecpriv->touch_mask)
++ valuator_mask_zero(ecpriv->touch_mask);
+ return;
++ }
+
+ if (ecpriv->close_slot)
+ {
+@@ -467,10 +471,27 @@
+ }
+ else
+ {
+- uint16_t type = ecpriv->new_touch ? XI_TouchBegin : XI_TouchUpdate;
++ if (ecpriv->new_touch)
++ {
++ int x_axis = ecpriv->mt_axis_map[ABS_MT_POSITION_X - ABS_MT_TOUCH_MAJOR];
++ int y_axis = ecpriv->mt_axis_map[ABS_MT_POSITION_Y - ABS_MT_TOUCH_MAJOR];
++ int x = valuator_mask_get(ecpriv->touch_mask, x_axis);
++ int y = valuator_mask_get(ecpriv->touch_mask, y_axis);
++
++ if (is_inside_active_area(priv, x, y))
++ xf86PostTouchEvent(pInfo->dev,
++ ecpriv->mt_slot_map[ecpriv->cur_slot],
++ XI_TouchBegin, 0, ecpriv->touch_mask);
++ else
++ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
++ }
++ else
++ {
++ xf86PostTouchEvent(pInfo->dev,
++ ecpriv->mt_slot_map[ecpriv->cur_slot],
++ XI_TouchUpdate, 0, ecpriv->touch_mask);
++ }
+
+- xf86PostTouchEvent(pInfo->dev, ecpriv->mt_slot_map[ecpriv->cur_slot],
+- type, 0, ecpriv->touch_mask);
+ ecpriv->new_touch = FALSE;
+ }
+
+@@ -628,7 +649,7 @@
+ ecpriv->cur_vals);
+ }
+ }
+- else
++ else if (ecpriv->mt_slot_map[ecpriv->cur_slot] != (uint32_t)-1)
+ ecpriv->close_slot = TRUE;
+ break;
+ case ABS_MT_TOUCH_MAJOR:
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:55:02.771347676 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:55:08.771347676 +0300
+@@ -1200,7 +1200,7 @@
+ * priv->synpara.area_{left|right|top|bottom}_edge are
+ * all set to zero), the function returns TRUE.
+ */
+-static Bool
++Bool
+ is_inside_active_area(SynapticsPrivate *priv, int x, int y)
+ {
+ Bool inside_area = TRUE;
+Index: xserver-xorg-input-synaptics/src/synproto.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synproto.h 2011-07-05 11:55:02.771347676 +0300
++++ xserver-xorg-input-synaptics/src/synproto.h 2011-07-05 11:55:08.771347676 +0300
+@@ -81,6 +81,7 @@
+ struct _SynapticsParameters;
+ struct SynapticsHwInfo;
+ struct CommData;
++struct _SynapticsPrivateRec;
+
+ struct SynapticsProtocolOperations {
+ int (*DevicePreInitHook)(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
+@@ -107,5 +108,6 @@
+
+ extern int HandleState(InputInfoPtr, struct SynapticsHwState*);
+ extern CARD32 timerFunc(OsTimerPtr timer, CARD32 now, pointer arg);
++extern Bool is_inside_active_area(struct _SynapticsPrivateRec *priv, int x, int y);
+
+ #endif /* _SYNPROTO_H_ */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/128_disable_three_click_action.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/128_disable_three_click_action.patch
@@ -0,0 +1,13 @@
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2012-02-13 20:30:53.165083092 -0800
++++ xserver-xorg-input-synaptics/src/synaptics.c 2012-02-13 20:32:17.402508282 -0800
+@@ -497,7 +497,7 @@
+ otherwise clickFinger is always button 1. */
+ clickFinger1 = 1;
+ clickFinger2 = (priv->has_right || priv->has_middle) ? 1 : 3;
+- clickFinger3 = (priv->has_right || priv->has_middle) ? 1 : 2;
++ clickFinger3 = 0; /* Disabled by default so three-touch gestures work */
+
+ /* Enable vert edge scroll */
+ vertEdgeScroll = TRUE;
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/200_fix_clickfinger_non-clickpads.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/200_fix_clickfinger_non-clickpads.patch
@@ -0,0 +1,96 @@
+From 6b76e659ff3c18f6120e17ab77bcbd37bb518724 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Wed, 21 Mar 2012 12:50:46 -0700
+Subject: [PATCH 1/2] Fix clickfinger actions when middle button emulation is
+ enabled
+
+When MBE is enabled, a physical left button press is delayed until a
+timeout is reached. This results in the logical left button being
+depressed while the physical left button is pressed. The physical state
+is stored as the "old" hw state, and it is used for detecting a
+transition from depressed to pressed for clickfinger actions. Since the
+"old" hw state shows the left button pressed, but the current logical
+state shows the left button unpressed, when the MBE timeout fires and we
+set the logical left button pressed the transition check fails.
+
+Since the "old" hw state is only used for clickfinger left button press
+transitions, redefining it to hold the previous logical hw state is
+sufficient for fixing the bug and should not cause any regressions.
+
+Signed-off-by: Chase Douglas
+---
+ src/synaptics.c | 5 ++++-
+ src/synapticsstr.h | 2 +-
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/src/synaptics.c b/src/synaptics.c
+index 489eeaa..9f214e5 100644
+--- a/src/synaptics.c
++++ b/src/synaptics.c
+@@ -1611,7 +1611,6 @@ ReadInput(InputInfoPtr pInfo)
+
+ SynapticsCopyHwState(priv->hwState, hw);
+ delay = HandleState(pInfo, hw, hw->millis, FALSE);
+- SynapticsCopyHwState(priv->old_hw_state, priv->hwState);
+ newDelay = TRUE;
+ }
+
+@@ -3236,6 +3235,10 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now,
+ /* generate a history of the absolute positions */
+ if (inside_active_area)
+ store_history(priv, hw->x, hw->y, hw->millis);
++
++ /* Save logical state for transition comparisons */
++ SynapticsCopyHwState(priv->old_hw_state, hw);
++
+ return delay;
+ }
+
+diff --git a/src/synapticsstr.h b/src/synapticsstr.h
+index fcefc46..55aab3d 100644
+--- a/src/synapticsstr.h
++++ b/src/synapticsstr.h
+@@ -196,7 +196,7 @@ struct _SynapticsPrivateRec
+ void *proto_data; /* protocol-specific data */
+
+ struct SynapticsHwState *hwState;
+- struct SynapticsHwState *old_hw_state; /* previous hw state */
++ struct SynapticsHwState *old_hw_state; /* previous logical hw state */
+
+ const char *device; /* device node */
+ Bool shm_config; /* True when shared memory area allocated */
+--
+1.7.9.1
+
+From 6b4561955b745c634df3dfef3e27a614beb64528 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Wed, 21 Mar 2012 12:52:00 -0700
+Subject: [PATCH 2/2] Fix clickfinger actions when buttons other than 1 are
+ reported
+
+The "old" logical state now holds the clickfinger action button. In
+order to check for proper clickpad press transition, we need to check if
+any of the left, middle, and right logical button states are pressed.
+
+Signed-off-by: Chase Douglas
+---
+ src/synaptics.c | 3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/src/synaptics.c b/src/synaptics.c
+index 9f214e5..e22929b 100644
+--- a/src/synaptics.c
++++ b/src/synaptics.c
+@@ -2779,7 +2779,8 @@ update_hw_button_state(const InputInfoPtr pInfo, struct SynapticsHwState *hw,
+ /* Fingers emulate other buttons. ClickFinger can only be
+ triggered on transition, when left is pressed
+ */
+- if(hw->left && !old->left && hw->numFingers >= 1) {
++ if(hw->left && !old->left && !old->middle && !old->right &&
++ hw->numFingers >= 1) {
+ handle_clickfinger(priv, hw);
+ }
+
+--
+1.7.9.1
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/series
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/series
@@ -0,0 +1,25 @@
+#01-synaptics-dont-grab-if-not-on-current-VT.patch
+02-do-not-use-synaptics-for-keyboards.patch
+
+101_resolution_detect_option.patch
+103_enable_cornertapping.patch
+104_always_enable_tapping.patch
+#105_correct_multifinger_click.patch
+106_always_enable_vert_edge_scroll.patch
+115_evdev_only.patch
+#116_xi2_1.patch
+#117_gestures.patch
+118_quell_error_msg.patch
+#119_active_area_touches.patch
+#120_active_touches_num_fingers.patch
+#121_semi-mt_num_fingers.patch
+#123_order_ProcessTouch_for_numFingers.patch
+124_syndaemon_events.patch
+125_option_rec_revert.patch
+126_ubuntu_xi22.patch
+128_disable_three_click_action.patch
+129_disable_three_touch_tap.patch
+
+# Temporary patches until they are merged upstream
+200_fix_clickfinger_non-clickpads.patch
+201_fix_clickfinger_clickpad_actions.patch
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/125_option_rec_revert.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/125_option_rec_revert.patch
@@ -0,0 +1,249 @@
+--- a/test/fake-symbols.c
++++ b/test/fake-symbols.c
+@@ -26,7 +26,7 @@ xf86WaitForInput (int fd, int timeout)
+ }
+
+ _X_EXPORT int
+-xf86OpenSerial (OPTTYPE options)
++xf86OpenSerial (pointer options)
+ {
+ return 0;
+ }
+@@ -37,43 +37,43 @@ xf86SetSerialSpeed (int fd, int speed)
+ return 0;
+ }
+
+-_X_EXPORT OPTTYPE
+-xf86ReplaceIntOption(OPTTYPE optlist, const char *name, const int val)
++_X_EXPORT pointer
++xf86ReplaceIntOption(pointer optlist, const char *name, const int val)
+ {
+ return NULL;
+ }
+
+ _X_EXPORT char *
+-xf86SetStrOption(OPTTYPE optlist, const char *name, CONST char *deflt)
++xf86SetStrOption(pointer optlist, const char *name, char *deflt)
+ {
+ return NULL;
+ }
+
+ _X_EXPORT int
+-xf86SetBoolOption(OPTTYPE optlist, const char *name, int deflt)
++xf86SetBoolOption(pointer optlist, const char *name, int deflt)
+ {
+ return 0;
+ }
+
+-_X_EXPORT OPTTYPE
+-xf86AddNewOption(OPTTYPE head, const char *name, const char *val)
++_X_EXPORT pointer
++xf86AddNewOption(pointer head, const char *name, const char *val)
+ {
+ return NULL;
+ }
+-_X_EXPORT CONST char *
+-xf86FindOptionValue(OPTTYPE options, const char *name)
++_X_EXPORT char *
++xf86FindOptionValue(pointer options, const char *name)
+ {
+ return NULL;
+ }
+
+ _X_EXPORT char *
+-xf86OptionName(OPTTYPE opt)
++xf86OptionName(pointer opt)
+ {
+ return NULL;
+ }
+
+ _X_EXPORT char *
+-xf86OptionValue(OPTTYPE opt)
++xf86OptionValue(pointer opt)
+ {
+ return NULL;
+ }
+@@ -85,7 +85,7 @@ xf86NameCmp(const char *s1, const char *
+ }
+
+ _X_EXPORT char *
+-xf86CheckStrOption(OPTTYPE optlist, const char *name, char *deflt)
++xf86CheckStrOption(pointer optlist, const char *name, char *deflt)
+ {
+ return NULL;
+ }
+@@ -196,8 +196,8 @@ xf86DeleteInput(InputInfoPtr pInp, int f
+ return;
+ }
+
+-_X_EXPORT OPTTYPE
+-xf86OptionListDuplicate(OPTTYPE options)
++_X_EXPORT pointer
++xf86OptionListDuplicate(pointer options)
+ {
+ return NULL;
+ }
+@@ -225,7 +225,7 @@ xf86PostKeyboardEvent(DeviceIntPtr
+ }
+
+ _X_EXPORT int
+-xf86SetIntOption(OPTTYPE optlist, const char *name, int deflt)
++xf86SetIntOption(pointer optlist, const char *name, int deflt)
+ {
+ return 0;
+ }
+@@ -254,7 +254,7 @@ InitPtrFeedbackClassDeviceStruct(DeviceI
+ _X_EXPORT int
+ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
+ int format, int mode, unsigned long len,
+- OPTTYPE value, Bool sendevent)
++ pointer value, Bool sendevent)
+ {
+ return 0;
+ }
+@@ -367,15 +367,15 @@ InitValuatorClassDeviceStruct(DeviceIntP
+ }
+
+
+-_X_EXPORT OPTTYPE
+-xf86ReplaceStrOption(OPTTYPE optlist, const char *name, const char* val)
++_X_EXPORT pointer
++xf86ReplaceStrOption(pointer optlist, const char *name, const char* val)
+ {
+ return NULL;
+ }
+
+
+-_X_EXPORT OPTTYPE
+-xf86NextOption(OPTTYPE list)
++_X_EXPORT pointer
++xf86NextOption(pointer list)
+ {
+ return NULL;
+ }
+@@ -424,14 +424,14 @@ InitFocusClassDeviceStruct(DeviceIntPtr
+
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ void
+-xf86ProcessCommonOptions(InputInfoPtr pInfo, OPTTYPE list)
++xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list)
+ {
+ }
+
+ void
+ xf86CollectInputOptions(InputInfoPtr pInfo,
+ const char **defaultOpts,
+- OPTTYPE extraOpts)
++ pointer extraOpts)
+ {
+ }
+
+--- a/test/fake-symbols.h
++++ b/test/fake-symbols.h
+@@ -1,37 +1,29 @@
+ #include
+ #include
+
+-#if GET_ABI_MAJOR(ABI_XINPUT_VERSION) >= 14
+-#define OPTTYPE XF86OptionPtr
+-#define CONST const
+-#else
+-#define OPTTYPE pointer
+-#define CONST
+-#endif
+-
+ extern int xf86ReadSerial (int fd, void *buf, int count);
+ extern int xf86WriteSerial (int fd, const void *buf, int count);
+ extern int xf86CloseSerial (int fd);
+ extern int xf86WaitForInput (int fd, int timeout);
+-extern int xf86OpenSerial (OPTTYPE options);
++extern int xf86OpenSerial (pointer options);
+ extern int xf86SetSerialSpeed (int fd, int speed);
+
+-extern OPTTYPE xf86ReplaceIntOption(OPTTYPE optlist, const char *name, const int val);
+-extern OPTTYPE xf86AddNewOption(OPTTYPE head, const char *name, const char *val);
+-extern char* xf86OptionName(OPTTYPE opt);
+-extern CONST char* xf86FindOptionValue(OPTTYPE options, const char *name);
++extern pointer xf86ReplaceIntOption(pointer optlist, const char *name, const int val);
++extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
++extern char* xf86OptionName(pointer opt);
++extern char* xf86FindOptionValue(pointer options, const char *name);
+ extern int xf86NameCmp(const char *s1, const char *s2);
+-extern char* xf86CheckStrOption(OPTTYPE optlist, const char *name, char *deflt);
++extern char* xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
+
+
+-extern char * xf86SetStrOption(OPTTYPE optlist, const char *name, CONST char *deflt);
+-extern int xf86SetBoolOption(OPTTYPE optlist, const char *name, int deflt);
+-extern OPTTYPE xf86AddNewOption(OPTTYPE head, const char *name, const char *val);
+-extern CONST char* xf86FindOptionValue(OPTTYPE options, const char *name);
+-extern char* xf86OptionName(OPTTYPE opt);
+-extern char *xf86OptionValue(OPTTYPE opt);
++extern char * xf86SetStrOption(pointer optlist, const char *name, char *deflt);
++extern int xf86SetBoolOption(pointer optlist, const char *name, int deflt);
++extern pointer xf86AddNewOption(pointer head, const char *name, const char *val);
++extern char* xf86FindOptionValue(pointer options, const char *name);
++extern char* xf86OptionName(pointer opt);
++extern char *xf86OptionValue(pointer opt);
+ extern int xf86NameCmp(const char *s1, const char *s2);
+-extern char * xf86CheckStrOption(OPTTYPE optlist, const char *name, char *deflt);
++extern char * xf86CheckStrOption(pointer optlist, const char *name, char *deflt);
+ extern void xf86AddEnabledDevice(InputInfoPtr pInfo);
+ extern void xf86RemoveEnabledDevice(InputInfoPtr pInfo);
+ extern Atom XIGetKnownProperty(char *name);
+@@ -61,7 +52,7 @@ XISetDevicePropertyDeletable(DeviceIntPt
+
+ extern InputInfoPtr xf86FirstLocalDevice(void);
+ extern void xf86DeleteInput(InputInfoPtr pInp, int flags);
+-extern OPTTYPE xf86OptionListDuplicate(OPTTYPE options);
++extern pointer xf86OptionListDuplicate(pointer options);
+ extern Bool
+ InitButtonClassDeviceStruct(DeviceIntPtr dev, int numButtons, Atom* labels,
+ CARD8 *map);
+@@ -73,7 +64,7 @@ xf86PostKeyboardEvent(DeviceIntPtr
+ unsigned int key_code,
+ int is_down);
+ extern int
+-xf86SetIntOption(OPTTYPE optlist, const char *name, int deflt);
++xf86SetIntOption(pointer optlist, const char *name, int deflt);
+ extern void
+ xf86PostButtonEventP(DeviceIntPtr device,
+ int is_absolute,
+@@ -91,7 +82,7 @@ InitPtrFeedbackClassDeviceStruct(DeviceI
+ extern int
+ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
+ int format, int mode, unsigned long len,
+- OPTTYPE value, Bool sendevent);
++ pointer value, Bool sendevent);
+ extern CARD32 GetTimeInMillis (void);
+
+ extern int
+@@ -140,10 +131,10 @@ extern Bool
+ InitValuatorClassDeviceStruct(DeviceIntPtr dev, int numAxes, Atom *labels,
+ int numMotionEvents, int mode);
+
+-extern OPTTYPE
+-xf86ReplaceStrOption(OPTTYPE optlist, const char *name, const char* val);
++extern pointer
++xf86ReplaceStrOption(pointer optlist, const char *name, const char* val);
+
+-extern OPTTYPE xf86NextOption(OPTTYPE list);
++extern pointer xf86NextOption(pointer list);
+
+ extern int
+ XIGetDeviceProperty (DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value);
+@@ -167,12 +158,12 @@ extern Bool InitFocusClassDeviceStruct(D
+
+ #if GET_ABI_MAJOR(ABI_XINPUT_VERSION) < 12
+ extern void
+-xf86ProcessCommonOptions(InputInfoPtr pInfo, OPTTYPE list);
++xf86ProcessCommonOptions(InputInfoPtr pInfo, pointer list);
+
+ extern void
+ xf86CollectInputOptions(InputInfoPtr pInfo,
+ const char **defaultOpts,
+- OPTTYPE extraOpts);
++ pointer extraOpts);
+
+ extern InputInfoPtr
+ xf86AllocateInput(InputDriverPtr drv, int flags);
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/118_quell_error_msg.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/118_quell_error_msg.patch
@@ -0,0 +1,30 @@
+Index: xserver-xorg-input-synaptics/tools/synclient.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/tools/synclient.c 2011-07-05 11:54:31.731347670 +0300
++++ xserver-xorg-input-synaptics/tools/synclient.c 2011-07-05 11:55:06.211347676 +0300
+@@ -391,9 +391,7 @@
+ unwind:
+ XFree(properties);
+ XFreeDeviceList(info);
+- if (!dev)
+- fprintf(stderr, "Unable to find a synaptics device.\n");
+- else if (error && dev)
++ if (error && dev)
+ {
+ XCloseDevice(dpy, dev);
+ dev = NULL;
+Index: xserver-xorg-input-synaptics/tools/syndaemon.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/tools/syndaemon.c 2011-07-05 11:54:31.751347670 +0300
++++ xserver-xorg-input-synaptics/tools/syndaemon.c 2011-07-05 11:55:06.211347676 +0300
+@@ -512,9 +512,7 @@
+ unwind:
+ XFree(properties);
+ XFreeDeviceList(info);
+- if (!dev)
+- fprintf(stderr, "Unable to find a synaptics device.\n");
+- else if (error && dev)
++ if (error && dev)
+ {
+ XCloseDevice(dpy, dev);
+ dev = NULL;
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/01-synaptics-dont-grab-if-not-on-current-VT.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/01-synaptics-dont-grab-if-not-on-current-VT.patch
@@ -0,0 +1,18 @@
+Do not grab the synaptics device if not running on the current VT.
+This helps when switching user or more in general when running more than one
+instance of Xorg.
+
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-01-25 21:55:50.000000000 +1100
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-01-25 22:06:10.496826002 +1100
+@@ -703,6 +703,9 @@
+ return BadAlloc;
+ }
+
++ if (xf86Screens[0]->vtSema == FALSE)
++ return !Success;
++
+ /* may change pInfo->options */
+ SetDeviceAndProtocol(pInfo);
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/103_enable_cornertapping.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/103_enable_cornertapping.patch
@@ -0,0 +1,15 @@
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:54:36.601347672 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:54:45.481347675 +0300
+@@ -560,8 +560,8 @@
+ pars->touchpad_off = xf86SetIntOption(opts, "TouchpadOff", 0);
+ pars->locked_drags = xf86SetBoolOption(opts, "LockedDrags", FALSE);
+ pars->locked_drag_time = xf86SetIntOption(opts, "LockedDragTimeout", 5000);
+- pars->tap_action[RT_TAP] = xf86SetIntOption(opts, "RTCornerButton", 0);
+- pars->tap_action[RB_TAP] = xf86SetIntOption(opts, "RBCornerButton", 0);
++ pars->tap_action[RT_TAP] = xf86SetIntOption(opts, "RTCornerButton", 2);
++ pars->tap_action[RB_TAP] = xf86SetIntOption(opts, "RBCornerButton", 3);
+ pars->tap_action[LT_TAP] = xf86SetIntOption(opts, "LTCornerButton", 0);
+ pars->tap_action[LB_TAP] = xf86SetIntOption(opts, "LBCornerButton", 0);
+ pars->tap_action[F1_TAP] = xf86SetIntOption(opts, "TapButton1", tapButton1);
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/101_resolution_detect_option.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/101_resolution_detect_option.patch
@@ -0,0 +1,137 @@
+Index: xserver-xorg-input-synaptics/include/synaptics-properties.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/include/synaptics-properties.h 2011-07-05 11:49:41.241347626 +0300
++++ xserver-xorg-input-synaptics/include/synaptics-properties.h 2011-07-05 11:54:23.291347670 +0300
+@@ -140,6 +140,9 @@
+ #define SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR "Synaptics Pressure Motion Factor"
+
+ /* 8 bit (BOOL) */
++#define SYNAPTICS_PROP_RESOLUTION_DETECT "Synaptics Resolution Detect"
++
++/* 8 bit (BOOL) */
+ #define SYNAPTICS_PROP_GRAB "Synaptics Grab Event Device"
+
+ /* 8 bit (BOOL), 1 value, tap-and-drag */
+Index: xserver-xorg-input-synaptics/man/synaptics.man
+===================================================================
+--- xserver-xorg-input-synaptics.orig/man/synaptics.man 2011-07-05 11:49:41.231347626 +0300
++++ xserver-xorg-input-synaptics/man/synaptics.man 2011-07-05 11:54:23.291347670 +0300
+@@ -457,6 +457,18 @@
+ TapAndDragGesture option to false. Property: "Synaptics Gestures"
+ .
+ .TP
++.BI "Option \*ResolutionDetect\*q \*q" boolean \*q
++Allow or prevent the synaptics driver from reporting the size of the
++touchpad to the X server. The X server normally uses this information
++to scale movements so that touchpad movement corresponds visually to
++mouse cursor movements on the screen. However, in some rare cases where
++the touchpad height/width ratio is significantly different from the
++laptop, it can cause the mouse cursor to skip pixels in the X or Y axis.
++This option allows disabling this scaling behavior, which can provide
++smoother mouse movement in such cases.
++Property: "Synaptics Resolution Detect"
++.
++.TP
+ .BI "Option \*qVertResolution\*q \*q" integer \*q
+ Resolution of X coordinates in units/millimeter. The value is used
+ together with HorizResolution to compensate unequal vertical and
+@@ -898,6 +910,10 @@
+ FLOAT, 2 values, min, max.
+
+ .TP 7
++.BI "Synaptics Resolution Detect"
++8 bit (BOOL).
++
++.TP 7
+ .BI "Synaptics Grab Event Device"
+ 8 bit (BOOL).
+
+Index: xserver-xorg-input-synaptics/src/properties.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/properties.c 2011-07-05 11:49:41.271347626 +0300
++++ xserver-xorg-input-synaptics/src/properties.c 2011-07-05 11:54:23.291347670 +0300
+@@ -77,6 +77,7 @@
+ Atom prop_coastspeed = 0;
+ Atom prop_pressuremotion = 0;
+ Atom prop_pressuremotion_factor = 0;
++Atom prop_resolution_detect = 0;
+ Atom prop_grab = 0;
+ Atom prop_gestures = 0;
+ Atom prop_capabilities = 0;
+@@ -255,7 +256,7 @@
+ fvalues[1] = para->press_motion_max_factor;
+
+ prop_pressuremotion_factor = InitFloatAtom(pInfo->dev, SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR, 2, fvalues);
+-
++ prop_resolution_detect = InitAtom(pInfo->dev, SYNAPTICS_PROP_RESOLUTION_DETECT, 8, 1, ¶->resolution_detect);
+ prop_grab = InitAtom(pInfo->dev, SYNAPTICS_PROP_GRAB, 8, 1, ¶->grab_event_device);
+
+ values[0] = para->tap_and_drag_gesture;
+@@ -628,6 +629,12 @@
+
+ para->press_motion_min_z = press[0];
+ para->press_motion_max_z = press[1];
++ } else if (property == prop_resolution_detect)
++ {
++ if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
++ return BadMatch;
++
++ para->resolution_detect = *(BOOL*)prop->data;
+ } else if (property == prop_grab)
+ {
+ if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:49:41.261347626 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:54:36.601347672 +0300
+@@ -579,6 +579,7 @@
+ pars->single_tap_timeout = xf86SetIntOption(opts, "SingleTapTimeout", 180);
+ pars->press_motion_min_z = xf86SetIntOption(opts, "PressureMotionMinZ", pressureMotionMinZ);
+ pars->press_motion_max_z = xf86SetIntOption(opts, "PressureMotionMaxZ", pressureMotionMaxZ);
++ pars->resolution_detect = xf86SetBoolOption(opts, "ResolutionDetect", TRUE);
+
+ pars->min_speed = xf86SetRealOption(opts, "MinSpeed", 0.4);
+ pars->max_speed = xf86SetRealOption(opts, "MaxSpeed", 0.7);
+@@ -1039,7 +1040,7 @@
+ #endif
+
+ /* X valuator */
+- if (priv->minx < priv->maxx)
++ if (priv->minx < priv->maxx && priv->synpara.resolution_detect)
+ {
+ min = priv->minx;
+ max = priv->maxx;
+@@ -1061,7 +1062,7 @@
+ xf86InitValuatorDefaults(dev, 0);
+
+ /* Y valuator */
+- if (priv->miny < priv->maxy)
++ if (priv->miny < priv->maxy && priv->synpara.resolution_detect)
+ {
+ min = priv->miny;
+ max = priv->maxy;
+Index: xserver-xorg-input-synaptics/src/synapticsstr.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synapticsstr.h 2011-07-05 11:49:41.251347626 +0300
++++ xserver-xorg-input-synaptics/src/synapticsstr.h 2011-07-05 11:54:33.021347672 +0300
+@@ -155,6 +155,7 @@
+ int press_motion_max_z; /* finger pressure at which maximum pressure motion factor is applied */
+ double press_motion_min_factor; /* factor applied on speed when finger pressure is at minimum */
+ double press_motion_max_factor; /* factor applied on speed when finger pressure is at minimum */
++ Bool resolution_detect; /* report pad size to xserver? */
+ Bool grab_event_device; /* grab event device for exclusive use? */
+ Bool tap_and_drag_gesture; /* Switches the tap-and-drag gesture on/off */
+ unsigned int resolution_horiz; /* horizontal resolution of touchpad in units/mm */
+Index: xserver-xorg-input-synaptics/tools/synclient.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/tools/synclient.c 2011-07-05 11:49:41.281347626 +0300
++++ xserver-xorg-input-synaptics/tools/synclient.c 2011-07-05 11:54:31.731347670 +0300
+@@ -137,6 +137,8 @@
+ {"PressureMotionMaxZ", PT_INT, 1, 255, SYNAPTICS_PROP_PRESSURE_MOTION, 32, 1},
+ {"PressureMotionMinFactor", PT_DOUBLE, 0, 10.0,SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR, 0 /*float*/, 0},
+ {"PressureMotionMaxFactor", PT_DOUBLE, 0, 10.0,SYNAPTICS_PROP_PRESSURE_MOTION_FACTOR, 0 /*float*/, 1},
++ {"ResolutionDetect", PT_BOOL, 0, 1, SYNAPTICS_PROP_RESOLUTION_DETECT, 8, 0},
++
+ {"GrabEventDevice", PT_BOOL, 0, 1, SYNAPTICS_PROP_GRAB, 8, 0},
+ {"TapAndDragGesture", PT_BOOL, 0, 1, SYNAPTICS_PROP_GESTURES, 8, 0},
+ {"AreaLeftEdge", PT_INT, 0, 10000, SYNAPTICS_PROP_AREA, 32, 0},
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/106_always_enable_vert_edge_scroll.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/106_always_enable_vert_edge_scroll.patch
@@ -0,0 +1,15 @@
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:54:48.311347674 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:54:51.321347674 +0300
+@@ -499,8 +499,8 @@
+ clickFinger2 = (priv->has_right || priv->has_middle) ? 1 : 3;
+ clickFinger3 = (priv->has_right || priv->has_middle) ? 1 : 2;
+
+- /* Enable vert edge scroll if we can't detect doubletap */
+- vertEdgeScroll = priv->has_double ? FALSE : TRUE;
++ /* Enable vert edge scroll */
++ vertEdgeScroll = TRUE;
+ horizEdgeScroll = FALSE;
+
+ /* Enable twofinger scroll if we can detect doubletap */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/104_always_enable_tapping.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/104_always_enable_tapping.patch
@@ -0,0 +1,19 @@
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:54:45.481347675 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:54:48.311347674 +0300
+@@ -488,10 +488,10 @@
+ palmMinWidth = priv->minw + range * (10.0/16);
+ emulateTwoFingerMinW = priv->minw + range * (7.0/16);
+
+- /* Enable tap if we don't have a phys left button */
+- tapButton1 = priv->has_left ? 0 : 1;
+- tapButton2 = priv->has_left ? 0 : 3;
+- tapButton3 = priv->has_left ? 0 : 2;
++ /* Enable tap */
++ tapButton1 = 1;
++ tapButton2 = 2;
++ tapButton3 = 3;
+
+ /* Enable multifinger-click if only have one physical button,
+ otherwise clickFinger is always button 1. */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/126_ubuntu_xi22.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/126_ubuntu_xi22.patch
@@ -0,0 +1,11 @@
+--- a/configure.ac
++++ b/configure.ac
+@@ -64,7 +64,7 @@ AC_SUBST([sdkdir])
+ DRIVER_NAME=synaptics
+ AC_SUBST([DRIVER_NAME])
+
+-PKG_CHECK_MODULES(XI22, [inputproto >= 2.1.99.3] [xorg-server >= 1.11.99.901], HAVE_XI22="yes", HAVE_XI22="no")
++PKG_CHECK_MODULES(XI22, [inputproto >= 2.1.99.3] [xorg-server >= 1.11.3], HAVE_XI22="yes", HAVE_XI22="no")
+ if test "x$HAVE_XI22" = xyes; then
+ AC_DEFINE(HAVE_MULTITOUCH, 1, [XI2.2 available])
+ fi
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/116_xi2_1.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/116_xi2_1.patch
@@ -0,0 +1,574 @@
+Index: xserver-xorg-input-synaptics/configure.ac
+===================================================================
+--- xserver-xorg-input-synaptics.orig/configure.ac 2011-07-05 11:54:32.981347672 +0300
++++ xserver-xorg-input-synaptics/configure.ac 2011-07-05 11:54:55.781347674 +0300
+@@ -101,6 +101,9 @@
+ AC_MSG_RESULT([eventcomm])
+ BUILD_EVENTCOMM="yes"
+ AC_DEFINE(BUILD_EVENTCOMM, 1, [Optional backend eventcomm enabled])
++
++ # Obtain compiler/linker options for mtdev
++ PKG_CHECK_MODULES(MTDEV, mtdev)
+ ;;
+ *freebsd* | *openbsd* | *netbsd* | *dragonfly*)
+ AC_MSG_RESULT([psmcomm])
+Index: xserver-xorg-input-synaptics/src/Makefile.am
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/Makefile.am 2011-07-05 11:54:33.041347672 +0300
++++ xserver-xorg-input-synaptics/src/Makefile.am 2011-07-05 11:54:55.781347674 +0300
+@@ -40,6 +40,7 @@
+ if BUILD_EVENTCOMM
+ @DRIVER_NAME@_drv_la_SOURCES += \
+ eventcomm.c eventcomm.h
++@DRIVER_NAME@_drv_la_LIBADD = $(MTDEV_LIBS)
+ endif
+
+ if BUILD_PSMCOMM
+Index: xserver-xorg-input-synaptics/src/alpscomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/alpscomm.c 2011-07-05 11:54:33.001347672 +0300
++++ xserver-xorg-input-synaptics/src/alpscomm.c 2011-07-05 11:54:55.781347674 +0300
+@@ -230,6 +230,9 @@
+ struct SynapticsProtocolOperations alps_proto_operations = {
+ NULL,
+ NULL,
++ NULL,
++ NULL,
++ NULL,
+ ALPSQueryHardware,
+ ALPSReadHwState,
+ ALPSAutoDevProbe,
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:54:33.051347672 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:54:55.781347674 +0300
+@@ -41,6 +41,8 @@
+ #include "synaptics.h"
+ #include "synapticsstr.h"
+ #include
++#include
++#include
+
+
+ #define SYSCALL(call) while (((call) == -1) && (errno == EINTR))
+@@ -55,16 +57,116 @@
+ * Function Definitions
+ ****************************************************************************/
+
+-static void
+-EventDeviceOnHook(InputInfoPtr pInfo, SynapticsParameters *para)
++static int
++EventDevicePreInitHook(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
+ {
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+- BOOL *need_grab;
++ EventcommPrivate *ecpriv;
++ struct input_absinfo abs;
++ int rc;
+
++ priv->proto_data = calloc(1, sizeof(EventcommPrivate));
+ if (!priv->proto_data)
+- priv->proto_data = calloc(1, sizeof(BOOL));
++ return !Success;
++
++ ecpriv = priv->proto_data;
++ ecpriv->need_grab = TRUE;
++ ecpriv->num_touches = 10;
++ ecpriv->cur_slot = -1;
++
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGABS(ABS_MT_SLOT), &abs));
++ if (rc >= 0 && abs.maximum > 0)
++ ecpriv->num_touches = abs.maximum + 1;
++ else {
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGABS(ABS_MT_TRACKING_ID), &abs));
++ if (rc >= 0 && abs.maximum > 0)
++ ecpriv->num_touches = abs.maximum + 1;
++ }
++
++ return Success;
++}
+
+- need_grab = (BOOL*)priv->proto_data;
++static Bool
++EventDeviceInitHook(DeviceIntPtr dev)
++{
++ InputInfoPtr pInfo = dev->public.devicePrivate;
++ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++ int i;
++
++ if (!priv->has_touch)
++ return Success;
++
++ ecpriv->mt_slot_map = malloc(ecpriv->num_touches * sizeof(int));
++ if (!ecpriv->mt_slot_map)
++ goto err;
++
++ for (i = 0; i < ecpriv->num_touches; i++)
++ ecpriv->mt_slot_map[i] = -1;
++
++ ecpriv->touch_mask = valuator_mask_new(ecpriv->num_mt_axes);
++ ecpriv->cur_vals = valuator_mask_new(ecpriv->num_mt_axes);
++ if (!ecpriv->touch_mask || !ecpriv->cur_vals)
++ goto err;
++
++ if (!InitTouchClassDeviceStruct(pInfo->dev, ecpriv->num_touches,
++ XIDependentTouch, ecpriv->num_mt_axes))
++ goto err;
++
++ for (i = ABS_MT_TOUCH_MAJOR; i <= ABS_MT_DISTANCE; i++) {
++ int axnum, resolution = 10000;
++ char *name;
++ Atom atom;
++ static char * const names[] = {
++ AXIS_LABEL_PROP_ABS_MT_TOUCH_MAJOR,
++ AXIS_LABEL_PROP_ABS_MT_TOUCH_MINOR,
++ AXIS_LABEL_PROP_ABS_MT_WIDTH_MAJOR,
++ AXIS_LABEL_PROP_ABS_MT_WIDTH_MINOR,
++ AXIS_LABEL_PROP_ABS_MT_ORIENTATION,
++ AXIS_LABEL_PROP_ABS_MT_POSITION_X,
++ AXIS_LABEL_PROP_ABS_MT_POSITION_Y,
++ AXIS_LABEL_PROP_ABS_MT_TOOL_TYPE,
++ AXIS_LABEL_PROP_ABS_MT_BLOB_ID,
++ AXIS_LABEL_PROP_ABS_MT_TRACKING_ID,
++ AXIS_LABEL_PROP_ABS_MT_PRESSURE,
++ };
++
++ if (!BitIsOn(ecpriv->absbits, i))
++ continue;
++
++ axnum = ecpriv->mt_axis_map[i - ABS_MT_TOUCH_MAJOR];
++ name = names[i - ABS_MT_TOUCH_MAJOR];
++
++ if (ecpriv->absinfo[i].resolution)
++ resolution = ecpriv->absinfo[i].resolution * 1000;
++
++ atom = MakeAtom(name, strlen(name), TRUE);
++
++ xf86InitTouchValuatorAxisStruct(pInfo->dev, axnum, atom,
++ ecpriv->absinfo[i].minimum,
++ ecpriv->absinfo[i].maximum,
++ ecpriv->absinfo[i].resolution);
++ }
++
++ return Success;
++
++err:
++ free(ecpriv->mt_slot_map);
++ ecpriv->mt_slot_map = NULL;
++ free(ecpriv->cur_vals);
++ ecpriv->cur_vals = NULL;
++ free(ecpriv->touch_mask);
++ ecpriv->touch_mask = NULL;
++ return !Success;
++}
++
++static void
++EventDeviceOnHook(InputInfoPtr pInfo, SynapticsParameters *para)
++{
++ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++ struct input_absinfo abs;
++ int rc;
+
+ if (para->grab_event_device) {
+ /* Try to grab the event device so that data don't leak to /dev/input/mice */
+@@ -76,7 +178,50 @@
+ }
+ }
+
+- *need_grab = FALSE;
++ ecpriv->need_grab = FALSE;
++
++ if (priv->has_touch) {
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGABS(ABS_MT_SLOT), &abs));
++ if (rc >= 0)
++ ecpriv->cur_slot = abs.value;
++ }
++
++ ecpriv->mtdev = malloc(sizeof(struct mtdev));
++ if (!ecpriv->mtdev)
++ return;
++
++ if (mtdev_open(ecpriv->mtdev, pInfo->fd)) {
++ free(ecpriv->mtdev);
++ ecpriv->mtdev = NULL;
++ return;
++ }
++}
++
++static void
++EventDeviceOffHook(InputInfoPtr pInfo)
++{
++ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++
++ if (ecpriv->mtdev) {
++ mtdev_close(ecpriv->mtdev);
++ free(ecpriv->mtdev);
++ ecpriv->mtdev = NULL;
++ }
++}
++
++static void
++EventDeviceCloseHook(DeviceIntPtr dev)
++{
++ InputInfoPtr pInfo = dev->public.devicePrivate;
++ SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++
++ free(ecpriv->mt_slot_map);
++ free(ecpriv->cur_vals);
++ free(ecpriv->touch_mask);
++ free(ecpriv);
++ priv->proto_data = NULL;
+ }
+
+ static Bool
+@@ -171,11 +316,14 @@
+ event_query_axis_ranges(InputInfoPtr pInfo)
+ {
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+ struct input_absinfo abs = {0};
+- unsigned long absbits[NBITS(ABS_MAX)] = {0};
+ unsigned long keybits[NBITS(KEY_MAX)] = {0};
+ char buf[256];
+- int rc;
++ int i, rc;
++ uint8_t prop;
++
++ memset(ecpriv->absbits, 0, sizeof(ecpriv->absbits));
+
+ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGABS(ABS_X), &abs));
+ if (rc >= 0)
+@@ -215,11 +363,12 @@
+
+ priv->has_pressure = FALSE;
+ priv->has_width = FALSE;
+- SYSCALL(rc = ioctl(pInfo->fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits));
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGBIT(EV_ABS, sizeof(ecpriv->absbits)),
++ ecpriv->absbits));
+ if (rc >= 0)
+ {
+- priv->has_pressure = (TEST_BIT(ABS_PRESSURE, absbits) != 0);
+- priv->has_width = (TEST_BIT(ABS_TOOL_WIDTH, absbits) != 0);
++ priv->has_pressure = (TEST_BIT(ABS_PRESSURE, ecpriv->absbits) != 0);
++ priv->has_width = (TEST_BIT(ABS_TOOL_WIDTH, ecpriv->absbits) != 0);
+ }
+ else
+ xf86Msg(X_ERROR, "%s: failed to query ABS bits (%s)\n", pInfo->name,
+@@ -278,15 +427,34 @@
+
+ xf86Msg(X_PROBED, "%s: buttons:%s\n", pInfo->name, buf);
+ }
++
++ /* We don't support SemiMultitouch devices yet. */
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGPROP(sizeof(prop)), &prop));
++ if (rc >= 0 && (prop & INPUT_PROP_SEMI_MT))
++ return;
++
++ for (i = ABS_MT_TOUCH_MAJOR; i <= ABS_MT_PRESSURE; i++) {
++ if (!BitIsOn(ecpriv->absbits, i))
++ continue;
++
++ SYSCALL(rc = ioctl(pInfo->fd, EVIOCGABS(i), &ecpriv->absinfo[i]));
++ if (rc < 0) {
++ ClearBit(ecpriv->absbits, i);
++ continue;
++ }
++
++ ecpriv->mt_axis_map[i - ABS_MT_TOUCH_MAJOR] = ecpriv->num_mt_axes++;
++ priv->has_touch = TRUE;
++ }
+ }
+
+ static Bool
+ EventQueryHardware(InputInfoPtr pInfo)
+ {
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+- BOOL *need_grab = (BOOL*)priv->proto_data;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+
+- if (!event_query_is_touchpad(pInfo->fd, (need_grab) ? *need_grab : TRUE))
++ if (!event_query_is_touchpad(pInfo->fd, ecpriv->need_grab))
+ return FALSE;
+
+ xf86Msg(X_PROBED, "%s: touchpad found\n", pInfo->name);
+@@ -294,13 +462,49 @@
+ return TRUE;
+ }
+
++static void
++ProcessTouch(InputInfoPtr pInfo, SynapticsPrivate *priv)
++{
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++
++ if (!priv->has_touch || ecpriv->cur_slot < 0 ||
++ ecpriv->mt_slot_map[ecpriv->cur_slot] == (uint32_t)-1)
++ return;
++
++ if (ecpriv->close_slot)
++ {
++ xf86PostTouchEvent(pInfo->dev,
++ ecpriv->mt_slot_map[ecpriv->cur_slot],
++ XI_TouchEnd, 0, ecpriv->touch_mask);
++ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
++ ecpriv->close_slot = FALSE;
++ }
++ else
++ {
++ uint16_t type = ecpriv->new_touch ? XI_TouchBegin : XI_TouchUpdate;
++
++ xf86PostTouchEvent(pInfo->dev, ecpriv->mt_slot_map[ecpriv->cur_slot],
++ type, 0, ecpriv->touch_mask);
++ ecpriv->new_touch = FALSE;
++ }
++
++ valuator_mask_zero(ecpriv->touch_mask);
++}
++
+ static Bool
+ SynapticsReadEvent(InputInfoPtr pInfo, struct input_event *ev)
+ {
++ SynapticsPrivate *priv = (SynapticsPrivate *) (pInfo->private);
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+ int rc = TRUE;
+ ssize_t len;
+
+- len = read(pInfo->fd, ev, sizeof(*ev));
++ if (ecpriv->mtdev)
++ len = mtdev_get(ecpriv->mtdev, pInfo->fd, ev, 1) *
++ sizeof(struct input_event);
++ else
++ len = read(pInfo->fd, ev, sizeof(*ev));
++
+ if (len <= 0)
+ {
+ /* We use X_NONE here because it doesn't alloc */
+@@ -324,6 +528,7 @@
+ struct SynapticsHwState *hw = &(comm->hwState);
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+ SynapticsParameters *para = &priv->synpara;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+
+ while (SynapticsReadEvent(pInfo, &ev)) {
+ switch (ev.type) {
+@@ -339,6 +544,7 @@
+ else
+ hw->numFingers = 0;
+ *hwRet = *hw;
++ ProcessTouch(pInfo, priv);
+ return TRUE;
+ }
+ break;
+@@ -413,6 +619,55 @@
+ case ABS_TOOL_WIDTH:
+ hw->fingerWidth = ev.value;
+ break;
++ case ABS_MT_SLOT:
++ if (priv->has_touch)
++ {
++ ProcessTouch(pInfo, priv);
++ ecpriv->cur_slot = ev.value;
++ }
++ break;
++ case ABS_MT_TRACKING_ID:
++ if (ecpriv->cur_slot < 0)
++ break;
++ if (ev.value >= 0)
++ {
++ if (ecpriv->mt_slot_map[ecpriv->cur_slot] != (uint32_t)-1)
++ {
++ xf86Msg(X_WARNING, "%s: Ignoring new tracking ID for "
++ "existing touch.\n", pInfo->dev->name);
++ }
++ else
++ {
++ ecpriv->mt_slot_map[ecpriv->cur_slot] =
++ ecpriv->next_touch_id++;
++ ecpriv->new_touch = TRUE;
++ valuator_mask_copy(ecpriv->touch_mask,
++ ecpriv->cur_vals);
++ }
++ }
++ else
++ ecpriv->close_slot = TRUE;
++ break;
++ case ABS_MT_TOUCH_MAJOR:
++ case ABS_MT_TOUCH_MINOR:
++ case ABS_MT_WIDTH_MAJOR:
++ case ABS_MT_WIDTH_MINOR:
++ case ABS_MT_ORIENTATION:
++ case ABS_MT_POSITION_X:
++ case ABS_MT_POSITION_Y:
++ case ABS_MT_TOOL_TYPE:
++ case ABS_MT_BLOB_ID:
++ case ABS_MT_PRESSURE:
++ if (ecpriv->cur_slot >= 0)
++ {
++ valuator_mask_set(ecpriv->touch_mask,
++ ecpriv->mt_axis_map[ev.code - ABS_MT_TOUCH_MAJOR],
++ ev.value);
++ valuator_mask_set(ecpriv->cur_vals,
++ ecpriv->mt_axis_map[ev.code - ABS_MT_TOUCH_MAJOR],
++ ev.value);
++ }
++ break;
+ }
+ break;
+ }
+@@ -432,9 +687,9 @@
+ EventReadDevDimensions(InputInfoPtr pInfo)
+ {
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+- BOOL *need_grab = (BOOL*)priv->proto_data;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+
+- if (event_query_is_touchpad(pInfo->fd, (need_grab) ? *need_grab : TRUE))
++ if (event_query_is_touchpad(pInfo->fd, ecpriv->need_grab))
+ event_query_axis_ranges(pInfo);
+ event_query_info(pInfo);
+ }
+@@ -491,8 +746,11 @@
+ }
+
+ struct SynapticsProtocolOperations event_proto_operations = {
++ EventDevicePreInitHook,
++ EventDeviceInitHook,
+ EventDeviceOnHook,
+- NULL,
++ EventDeviceOffHook,
++ EventDeviceCloseHook,
+ EventQueryHardware,
+ EventReadHwState,
+ EventAutoDevProbe,
+Index: xserver-xorg-input-synaptics/src/eventcomm.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.h 2011-07-05 11:54:32.991347672 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.h 2011-07-05 11:54:55.781347674 +0300
+@@ -29,9 +29,31 @@
+
+ #include
+ #include
++#include
++#include
++#include
+
+ /* for auto-dev: */
+ #define DEV_INPUT_EVENT "/dev/input"
+ #define EVENT_DEV_NAME "event"
+
++struct mtdev;
++
++typedef struct {
++ BOOL need_grab;
++ unsigned long absbits[ABS_CNT];
++ struct input_absinfo absinfo[ABS_CNT];
++ int mt_axis_map[ABS_MT_DISTANCE - ABS_MT_TOUCH_MAJOR];
++ int cur_slot;
++ uint32_t *mt_slot_map;
++ Bool close_slot;
++ uint32_t next_touch_id;
++ ValuatorMask *touch_mask;
++ ValuatorMask *cur_vals;
++ Bool new_touch;
++ int num_mt_axes;
++ int num_touches;
++ struct mtdev *mtdev;
++} EventcommPrivate;
++
+ #endif /* _EVENTCOMM_H_ */
+Index: xserver-xorg-input-synaptics/src/ps2comm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/ps2comm.c 2011-07-05 11:54:33.011347672 +0300
++++ xserver-xorg-input-synaptics/src/ps2comm.c 2011-07-05 11:54:55.781347674 +0300
+@@ -668,7 +668,10 @@
+
+ struct SynapticsProtocolOperations psaux_proto_operations = {
+ NULL,
++ NULL,
++ NULL,
+ PS2DeviceOffHook,
++ NULL,
+ PS2QueryHardware,
+ PS2ReadHwState,
+ PS2AutoDevProbe,
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:54:51.321347674 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:54:55.781347674 +0300
+@@ -735,6 +735,10 @@
+ priv->synpara.hyst_x = -1;
+ priv->synpara.hyst_y = -1;
+
++ if (priv->proto_ops->DevicePreInitHook)
++ if (priv->proto_ops->DevicePreInitHook(drv, pInfo, flags) != Success)
++ goto SetupProc_fail;
++
+ /* read hardware dimensions */
+ ReadDevDimensions(pInfo);
+
+@@ -911,6 +915,9 @@
+ InputInfoPtr pInfo = dev->public.devicePrivate;
+ SynapticsPrivate *priv = (SynapticsPrivate *) pInfo->private;
+
++ if (priv->proto_ops->DeviceCloseHook)
++ priv->proto_ops->DeviceCloseHook(dev);
++
+ RetValue = DeviceOff(dev);
+ TimerFree(priv->timer);
+ priv->timer = NULL;
+@@ -1089,6 +1096,9 @@
+ InitDeviceProperties(pInfo);
+ XIRegisterPropertyHandler(pInfo->dev, SetProperty, NULL, NULL);
+
++ if (priv->proto_ops->DeviceInitHook)
++ return priv->proto_ops->DeviceInitHook(dev);
++
+ return Success;
+ }
+
+Index: xserver-xorg-input-synaptics/src/synapticsstr.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synapticsstr.h 2011-07-05 11:54:33.021347672 +0300
++++ xserver-xorg-input-synaptics/src/synapticsstr.h 2011-07-05 11:54:55.781347674 +0300
+@@ -22,6 +22,8 @@
+ #ifndef _SYNAPTICSSTR_H_
+ #define _SYNAPTICSSTR_H_
+
++#include
++
+ #include "synproto.h"
+
+ #ifdef DBG
+@@ -240,6 +242,7 @@
+ Bool has_pressure; /* device reports pressure */
+ Bool has_width; /* device reports finger width */
+ Bool has_scrollbuttons; /* device has physical scrollbuttons */
++ Bool has_touch; /* device has multitouch */
+
+ enum TouchpadModel model; /* The detected model */
+ } SynapticsPrivate;
+Index: xserver-xorg-input-synaptics/src/synproto.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synproto.h 2011-07-05 11:54:33.071347672 +0300
++++ xserver-xorg-input-synaptics/src/synproto.h 2011-07-05 11:54:55.781347674 +0300
+@@ -83,8 +83,11 @@
+ struct CommData;
+
+ struct SynapticsProtocolOperations {
++ int (*DevicePreInitHook)(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
++ Bool (*DeviceInitHook)(DeviceIntPtr dev);
+ void (*DeviceOnHook)(InputInfoPtr pInfo, struct _SynapticsParameters *para);
+ void (*DeviceOffHook)(InputInfoPtr pInfo);
++ void (*DeviceCloseHook)(DeviceIntPtr dev);
+ Bool (*QueryHardware)(InputInfoPtr pInfo);
+ Bool (*ReadHwState)(InputInfoPtr pInfo,
+ struct SynapticsProtocolOperations *proto_ops,
+@@ -102,5 +105,4 @@
+ #endif /* BUILD_PSMCOMM */
+ extern struct SynapticsProtocolOperations alps_proto_operations;
+
+-
+ #endif /* _SYNPROTO_H_ */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/120_active_touches_num_fingers.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/120_active_touches_num_fingers.patch
@@ -0,0 +1,65 @@
+From 3a87e4530d065a114024a602fa76a4b94d905801 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Tue, 29 Mar 2011 10:28:52 -0400
+Subject: [PATCH 2/3] Use the number of active touches instead of BTN_*TAP
+
+The kernel doesn't know about inactive areas of the touchpad, so it
+doesn't filter out inactive touches when counting the number of fingers
+for events like BTN_DOUBLETAP.
+
+When touch data is provided, use the current active touch count instead.
+
+Signed-off-by: Chase Douglas
+---
+ src/eventcomm.c | 8 +++++++-
+ src/eventcomm.h | 1 +
+ 2 files changed, 8 insertions(+), 1 deletions(-)
+
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:55:08.771347676 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:55:10.801347676 +0300
+@@ -468,6 +468,7 @@
+ XI_TouchEnd, 0, ecpriv->touch_mask);
+ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
+ ecpriv->close_slot = FALSE;
++ ecpriv->active_touches--;
+ }
+ else
+ {
+@@ -479,9 +480,12 @@
+ int y = valuator_mask_get(ecpriv->touch_mask, y_axis);
+
+ if (is_inside_active_area(priv, x, y))
++ {
+ xf86PostTouchEvent(pInfo->dev,
+ ecpriv->mt_slot_map[ecpriv->cur_slot],
+ XI_TouchBegin, 0, ecpriv->touch_mask);
++ ecpriv->active_touches++;
++ }
+ else
+ ecpriv->mt_slot_map[ecpriv->cur_slot] = -1;
+ }
+@@ -540,7 +544,9 @@
+ case EV_SYN:
+ switch (ev->code) {
+ case SYN_REPORT:
+- if (comm->oneFinger)
++ if (priv->has_touch)
++ hw->numFingers = ecpriv->active_touches;
++ else if (comm->oneFinger)
+ hw->numFingers = 1;
+ else if (comm->twoFingers)
+ hw->numFingers = 2;
+Index: xserver-xorg-input-synaptics/src/eventcomm.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.h 2011-07-05 11:55:02.771347676 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.h 2011-07-05 11:55:10.801347676 +0300
+@@ -58,6 +58,7 @@
+ int num_touches;
+ struct mtdev *mtdev;
+ struct grail *grail;
++ int active_touches;
+ } EventcommPrivate;
+
+ extern Bool EventProcessEvent(InputInfoPtr pInfo, struct CommData *comm,
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/124_syndaemon_events.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/124_syndaemon_events.patch
@@ -0,0 +1,43 @@
+From b68ca129acfe56714a79230aa07c2b4b0249fb42 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Fri, 15 Apr 2011 15:23:17 -0400
+Subject: [PATCH xf86-input-synaptics] Drain XRecord connection of any events after handling replies
+
+If the X server sends an event to the XRecord connection the event
+will never be handled. This will cause the event queue to fill up in
+Xlib and lead to syndaemon running away at 100% cpu usage.
+
+This change drains any events from the connection. It's not a fix for
+the underlying bug in the server or Xlib, but it does paper over the
+issue for now.
+
+https://bugs.launchpad.net/bugs/754470
+http://bugs.freedesktop.org/show_bug.cgi?id=31921
+
+Signed-off-by: Chase Douglas
+---
+I'm offering this up as a work around for whatever real bug exists. It
+probably should not be committed upstream though.
+
+ tools/syndaemon.c | 8 ++++++++
+ 1 files changed, 8 insertions(+), 0 deletions(-)
+
+Index: xserver-xorg-input-synaptics/tools/syndaemon.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/tools/syndaemon.c 2011-07-05 11:55:06.211347676 +0300
++++ xserver-xorg-input-synaptics/tools/syndaemon.c 2011-07-05 11:55:19.281347678 +0300
+@@ -429,6 +429,14 @@
+ fprintf(stderr, "bad event received, major opcode %d\n", event.type);
+ }
+
++ /* If there are any events left over, they are in error. Drain them
++ * from the connection queue so we don't get stuck. */
++ while (XEventsQueued(dpy_data, QueuedAlready) > 0) {
++ XEvent event;
++ XNextEvent(dpy_data, &event);
++ fprintf(stderr, "bad event received, major opcode %d\n", event.type);
++ }
++
+ if (!ignore_modifier_keys && cbres.key_event) {
+ disable_event = 1;
+ }
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/117_gestures.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/117_gestures.patch
@@ -0,0 +1,868 @@
+Index: xserver-xorg-input-synaptics/configure.ac
+===================================================================
+--- xserver-xorg-input-synaptics.orig/configure.ac 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/configure.ac 2011-07-05 11:55:02.771347676 +0300
+@@ -104,6 +104,10 @@
+
+ # Obtain compiler/linker options for mtdev
+ PKG_CHECK_MODULES(MTDEV, mtdev)
++
++ # Obtain compiler/linker options for grail
++ PKG_CHECK_MODULES(GRAIL, utouch-grail)
++ AC_DEFINE(GESTURES, 1, Needed to interpret xorg headers properly)
+ ;;
+ *freebsd* | *openbsd* | *netbsd* | *dragonfly*)
+ AC_MSG_RESULT([psmcomm])
+Index: xserver-xorg-input-synaptics/src/Makefile.am
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/Makefile.am 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/src/Makefile.am 2011-07-05 11:55:02.771347676 +0300
+@@ -39,8 +39,8 @@
+
+ if BUILD_EVENTCOMM
+ @DRIVER_NAME@_drv_la_SOURCES += \
+- eventcomm.c eventcomm.h
+-@DRIVER_NAME@_drv_la_LIBADD = $(MTDEV_LIBS)
++ eventcomm.c eventcomm.h grail.c
++@DRIVER_NAME@_drv_la_LIBADD = $(MTDEV_LIBS) $(GRAIL_LIBS)
+ endif
+
+ if BUILD_PSMCOMM
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:55:02.771347676 +0300
+@@ -43,6 +43,7 @@
+ #include
+ #include
+ #include
++#include
+
+
+ #define SYSCALL(call) while (((call) == -1) && (errno == EINTR))
+@@ -186,28 +187,13 @@
+ ecpriv->cur_slot = abs.value;
+ }
+
+- ecpriv->mtdev = malloc(sizeof(struct mtdev));
+- if (!ecpriv->mtdev)
+- return;
+-
+- if (mtdev_open(ecpriv->mtdev, pInfo->fd)) {
+- free(ecpriv->mtdev);
+- ecpriv->mtdev = NULL;
+- return;
+- }
++ GrailOpen(pInfo);
+ }
+
+ static void
+ EventDeviceOffHook(InputInfoPtr pInfo)
+ {
+- SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+- EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
+-
+- if (ecpriv->mtdev) {
+- mtdev_close(ecpriv->mtdev);
+- free(ecpriv->mtdev);
+- ecpriv->mtdev = NULL;
+- }
++ GrailClose(pInfo);
+ }
+
+ static void
+@@ -499,9 +485,8 @@
+ int rc = TRUE;
+ ssize_t len;
+
+- if (ecpriv->mtdev)
+- len = mtdev_get(ecpriv->mtdev, pInfo->fd, ev, 1) *
+- sizeof(struct input_event);
++ if (ecpriv->grail)
++ len = grail_pull(ecpriv->grail, pInfo->fd);
+ else
+ len = read(pInfo->fd, ev, sizeof(*ev));
+
+@@ -511,167 +496,182 @@
+ if (errno != EAGAIN)
+ xf86MsgVerb(X_NONE, 0, "%s: Read error %s\n", pInfo->name, strerror(errno));
+ rc = FALSE;
+- } else if (len % sizeof(*ev)) {
++ } else if (ecpriv->grail)
++ rc = FALSE;
++ else if (len % sizeof(*ev)) {
+ xf86MsgVerb(X_NONE, 0, "%s: Read error, invalid number of bytes.", pInfo->name);
+ rc = FALSE;
+ }
+ return rc;
+ }
+
+-static Bool
+-EventReadHwState(InputInfoPtr pInfo,
+- struct SynapticsProtocolOperations *proto_ops,
+- struct CommData *comm, struct SynapticsHwState *hwRet)
++Bool
++EventProcessEvent(InputInfoPtr pInfo, struct CommData *comm,
++ struct SynapticsHwState *hwRet, const struct input_event *ev)
+ {
+- struct input_event ev;
+- Bool v;
+- struct SynapticsHwState *hw = &(comm->hwState);
+ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+- SynapticsParameters *para = &priv->synpara;
+ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++ SynapticsParameters *para = &priv->synpara;
++ struct SynapticsHwState *hw = &(comm->hwState);
++ Bool v;
+
+- while (SynapticsReadEvent(pInfo, &ev)) {
+- switch (ev.type) {
+- case EV_SYN:
+- switch (ev.code) {
+- case SYN_REPORT:
+- if (comm->oneFinger)
+- hw->numFingers = 1;
+- else if (comm->twoFingers)
+- hw->numFingers = 2;
+- else if (comm->threeFingers)
+- hw->numFingers = 3;
+- else
+- hw->numFingers = 0;
+- *hwRet = *hw;
++ switch (ev->type) {
++ case EV_SYN:
++ switch (ev->code) {
++ case SYN_REPORT:
++ if (comm->oneFinger)
++ hw->numFingers = 1;
++ else if (comm->twoFingers)
++ hw->numFingers = 2;
++ else if (comm->threeFingers)
++ hw->numFingers = 3;
++ else
++ hw->numFingers = 0;
++ *hwRet = *hw;
++ ProcessTouch(pInfo, priv);
++ return TRUE;
++ }
++ case EV_KEY:
++ v = (ev->value ? TRUE : FALSE);
++ switch (ev->code) {
++ case BTN_LEFT:
++ hw->left = v;
++ break;
++ case BTN_RIGHT:
++ hw->right = v;
++ break;
++ case BTN_MIDDLE:
++ hw->middle = v;
++ break;
++ case BTN_FORWARD:
++ hw->up = v;
++ break;
++ case BTN_BACK:
++ hw->down = v;
++ break;
++ case BTN_0:
++ hw->multi[0] = v;
++ break;
++ case BTN_1:
++ hw->multi[1] = v;
++ break;
++ case BTN_2:
++ hw->multi[2] = v;
++ break;
++ case BTN_3:
++ hw->multi[3] = v;
++ break;
++ case BTN_4:
++ hw->multi[4] = v;
++ break;
++ case BTN_5:
++ hw->multi[5] = v;
++ break;
++ case BTN_6:
++ hw->multi[6] = v;
++ break;
++ case BTN_7:
++ hw->multi[7] = v;
++ break;
++ case BTN_TOOL_FINGER:
++ comm->oneFinger = v;
++ break;
++ case BTN_TOOL_DOUBLETAP:
++ comm->twoFingers = v;
++ break;
++ case BTN_TOOL_TRIPLETAP:
++ comm->threeFingers = v;
++ break;
++ case BTN_TOUCH:
++ if (!priv->has_pressure)
++ hw->z = v ? para->finger_high + 1 : 0;
++ break;
++ }
++ break;
++ case EV_ABS:
++ switch (ev->code) {
++ case ABS_X:
++ hw->x = ev->value;
++ break;
++ case ABS_Y:
++ hw->y = ev->value;
++ break;
++ case ABS_PRESSURE:
++ hw->z = ev->value;
++ break;
++ case ABS_TOOL_WIDTH:
++ hw->fingerWidth = ev->value;
++ break;
++ case ABS_MT_SLOT:
++ if (priv->has_touch)
++ {
+ ProcessTouch(pInfo, priv);
+- return TRUE;
+- }
+- break;
+- case EV_KEY:
+- v = (ev.value ? TRUE : FALSE);
+- switch (ev.code) {
+- case BTN_LEFT:
+- hw->left = v;
+- break;
+- case BTN_RIGHT:
+- hw->right = v;
+- break;
+- case BTN_MIDDLE:
+- hw->middle = v;
+- break;
+- case BTN_FORWARD:
+- hw->up = v;
+- break;
+- case BTN_BACK:
+- hw->down = v;
+- break;
+- case BTN_0:
+- hw->multi[0] = v;
+- break;
+- case BTN_1:
+- hw->multi[1] = v;
+- break;
+- case BTN_2:
+- hw->multi[2] = v;
+- break;
+- case BTN_3:
+- hw->multi[3] = v;
+- break;
+- case BTN_4:
+- hw->multi[4] = v;
+- break;
+- case BTN_5:
+- hw->multi[5] = v;
+- break;
+- case BTN_6:
+- hw->multi[6] = v;
+- break;
+- case BTN_7:
+- hw->multi[7] = v;
+- break;
+- case BTN_TOOL_FINGER:
+- comm->oneFinger = v;
+- break;
+- case BTN_TOOL_DOUBLETAP:
+- comm->twoFingers = v;
+- break;
+- case BTN_TOOL_TRIPLETAP:
+- comm->threeFingers = v;
+- break;
+- case BTN_TOUCH:
+- if (!priv->has_pressure)
+- hw->z = v ? para->finger_high + 1 : 0;
+- break;
+- }
+- break;
+- case EV_ABS:
+- switch (ev.code) {
+- case ABS_X:
+- hw->x = ev.value;
+- break;
+- case ABS_Y:
+- hw->y = ev.value;
+- break;
+- case ABS_PRESSURE:
+- hw->z = ev.value;
+- break;
+- case ABS_TOOL_WIDTH:
+- hw->fingerWidth = ev.value;
+- break;
+- case ABS_MT_SLOT:
+- if (priv->has_touch)
+- {
+- ProcessTouch(pInfo, priv);
+- ecpriv->cur_slot = ev.value;
+- }
++ ecpriv->cur_slot = ev->value;
++ }
++ break;
++ case ABS_MT_TRACKING_ID:
++ if (ecpriv->cur_slot < 0)
+ break;
+- case ABS_MT_TRACKING_ID:
+- if (ecpriv->cur_slot < 0)
+- break;
+- if (ev.value >= 0)
++ if (ev->value >= 0)
++ {
++ if (ecpriv->mt_slot_map[ecpriv->cur_slot] != (uint32_t)-1)
+ {
+- if (ecpriv->mt_slot_map[ecpriv->cur_slot] != (uint32_t)-1)
+- {
+- xf86Msg(X_WARNING, "%s: Ignoring new tracking ID for "
+- "existing touch.\n", pInfo->dev->name);
+- }
+- else
+- {
+- ecpriv->mt_slot_map[ecpriv->cur_slot] =
+- ecpriv->next_touch_id++;
+- ecpriv->new_touch = TRUE;
+- valuator_mask_copy(ecpriv->touch_mask,
+- ecpriv->cur_vals);
+- }
++ xf86Msg(X_WARNING, "%s: Ignoring new tracking ID for "
++ "existing touch.\n", pInfo->dev->name);
+ }
+ else
+- ecpriv->close_slot = TRUE;
+- break;
+- case ABS_MT_TOUCH_MAJOR:
+- case ABS_MT_TOUCH_MINOR:
+- case ABS_MT_WIDTH_MAJOR:
+- case ABS_MT_WIDTH_MINOR:
+- case ABS_MT_ORIENTATION:
+- case ABS_MT_POSITION_X:
+- case ABS_MT_POSITION_Y:
+- case ABS_MT_TOOL_TYPE:
+- case ABS_MT_BLOB_ID:
+- case ABS_MT_PRESSURE:
+- if (ecpriv->cur_slot >= 0)
+ {
+- valuator_mask_set(ecpriv->touch_mask,
+- ecpriv->mt_axis_map[ev.code - ABS_MT_TOUCH_MAJOR],
+- ev.value);
+- valuator_mask_set(ecpriv->cur_vals,
+- ecpriv->mt_axis_map[ev.code - ABS_MT_TOUCH_MAJOR],
+- ev.value);
++ ecpriv->mt_slot_map[ecpriv->cur_slot] =
++ ecpriv->next_touch_id++;
++ ecpriv->new_touch = TRUE;
++ valuator_mask_copy(ecpriv->touch_mask,
++ ecpriv->cur_vals);
+ }
+- break;
+- }
+- break;
+- }
++ }
++ else
++ ecpriv->close_slot = TRUE;
++ break;
++ case ABS_MT_TOUCH_MAJOR:
++ case ABS_MT_TOUCH_MINOR:
++ case ABS_MT_WIDTH_MAJOR:
++ case ABS_MT_WIDTH_MINOR:
++ case ABS_MT_ORIENTATION:
++ case ABS_MT_POSITION_X:
++ case ABS_MT_POSITION_Y:
++ case ABS_MT_TOOL_TYPE:
++ case ABS_MT_BLOB_ID:
++ case ABS_MT_PRESSURE:
++ if (ecpriv->cur_slot >= 0)
++ {
++ valuator_mask_set(ecpriv->touch_mask,
++ ecpriv->mt_axis_map[ev->code - ABS_MT_TOUCH_MAJOR],
++ ev->value);
++ valuator_mask_set(ecpriv->cur_vals,
++ ecpriv->mt_axis_map[ev->code - ABS_MT_TOUCH_MAJOR],
++ ev->value);
++ }
++ break;
++ }
++ break;
++ }
++
++ return FALSE;
++}
++
++static Bool
++EventReadHwState(InputInfoPtr pInfo,
++ struct SynapticsProtocolOperations *proto_ops,
++ struct CommData *comm, struct SynapticsHwState *hwRet)
++{
++ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ EventcommPrivate *ecpriv = (EventcommPrivate *)priv->proto_data;
++ struct input_event ev;
++
++ while (SynapticsReadEvent(pInfo, &ev)) {
++ if (EventProcessEvent(pInfo, comm, hwRet, &ev) && !ecpriv->grail)
++ return TRUE;
+ }
++
+ return FALSE;
+ }
+
+Index: xserver-xorg-input-synaptics/src/eventcomm.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.h 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.h 2011-07-05 11:55:02.771347676 +0300
+@@ -32,12 +32,15 @@
+ #include
+ #include
+ #include
++#include
++#include "synproto.h"
+
+ /* for auto-dev: */
+ #define DEV_INPUT_EVENT "/dev/input"
+ #define EVENT_DEV_NAME "event"
+
+ struct mtdev;
++struct grail;
+
+ typedef struct {
+ BOOL need_grab;
+@@ -54,6 +57,13 @@
+ int num_mt_axes;
+ int num_touches;
+ struct mtdev *mtdev;
++ struct grail *grail;
+ } EventcommPrivate;
+
++extern Bool EventProcessEvent(InputInfoPtr pInfo, struct CommData *comm,
++ struct SynapticsHwState *hwRet,
++ const struct input_event *ev);
++extern int GrailOpen(InputInfoPtr pInfo);
++extern void GrailClose(InputInfoPtr pInfo);
++
+ #endif /* _EVENTCOMM_H_ */
+Index: xserver-xorg-input-synaptics/src/grail.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ xserver-xorg-input-synaptics/src/grail.c 2011-07-05 11:55:02.771347676 +0300
+@@ -0,0 +1,376 @@
++/*
++ * Copyright © 2010 Canonical, Ltd.
++ *
++ * Permission to use, copy, modify, distribute, and sell this software
++ * and its documentation for any purpose is hereby granted without
++ * fee, provided that the above copyright notice appear in all copies
++ * and that both that copyright notice and this permission notice
++ * appear in supporting documentation, and that the name of Red Hat
++ * not be used in advertising or publicity pertaining to distribution
++ * of the software without specific, written prior permission. Red
++ * Hat makes no representations about the suitability of this software
++ * for any purpose. It is provided "as is" without express or implied
++ * warranty.
++ *
++ * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
++ * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
++ * OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
++ * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
++ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
++ *
++ * Authors:
++ * Chase Douglas (chase.douglas@canonical.com)
++ */
++
++/* So we can get at the right data in xorg/windowstr.h */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include
++#include "synaptics.h"
++#include "synapticsstr.h"
++#include "eventcomm.h"
++
++//#include "gestureproto.h"
++
++/*
++ * Provided by the Maverick X server, we don't want to pollute the official
++ * X.org API.
++ */
++extern _X_EXPORT void xf86PostGestureEvent(DeviceIntPtr dev, unsigned short x,
++ unsigned short y, unsigned short client_id,
++ unsigned short gesture_id, unsigned short gesture_type,
++ Window root, Window event, Window child,
++ unsigned short status, unsigned short num_props,
++ float *props);
++
++static WindowPtr CommonAncestor(WindowPtr a, WindowPtr b)
++{
++ WindowPtr c;
++
++ if (a == b)
++ return a;
++
++ for (b = b; b; b = b->parent)
++ for (c = a; c; c = c->parent)
++ if (c == b)
++ return b;
++
++ return NullWindow;
++}
++
++static WindowPtr GetWindowForGestures(struct grail *grail,
++ const struct grail_coord *contacts,
++ int num_contacts)
++{
++ WindowPtr window = NULL;
++ int i;
++
++ for (i = 0; i < num_contacts; i++)
++ {
++ float screen_x = contacts[i].x;
++ float screen_y = contacts[i].y;
++ WindowPtr this_window;
++
++ this_window = xf86CoordinatesToWindow(screen_x, screen_y, 0);
++ if (!this_window)
++ return NullWindow;
++
++ if (!window)
++ window = this_window;
++ else
++ window = CommonAncestor(window, this_window);
++ }
++
++ return window;
++}
++
++static int GetClients(struct grail *grail,
++ struct grail_client_info *clients, int max_clients,
++ const struct grail_coord *contacts, int num_contacts,
++ const grail_mask_t *types, int type_bytes)
++{
++ WindowPtr child_window;
++ WindowPtr window;
++ WindowPtr root_window;
++ InputInfoPtr pInfo = grail->priv;
++ DeviceIntPtr master = pInfo->dev->u.master;
++ struct grail_coord cursor_coord;
++ int j;
++ int found_match = 0;
++ int num_clients = 0;
++ int type;
++
++ if (max_clients <= 0)
++ return 0;
++
++ /* If this mouse isn't hooked up to a cursor, don't do anything */
++ if (!master)
++ return 0;
++
++ cursor_coord.x = master->last.valuators[0];
++ cursor_coord.y = master->last.valuators[1];
++
++ child_window = GetWindowForGestures(grail, &cursor_coord, 1);
++
++ if (!child_window)
++ return 0;
++
++ memset(clients, 0, sizeof(struct grail_client_info) * max_clients);
++
++ /* Find the root window. */
++ for (root_window = child_window; root_window->parent;
++ root_window = root_window->parent);
++
++ /*
++ * Check for a root client with SYSFLAG1 set. SYSFLAG1 is effectively an
++ * active grab for system gestures. We assume only one client has SYSFLAG1
++ * set.
++ */
++ window = child_window;
++ while (window)
++ {
++ /* Check if any gestures have been selected on this window. */
++ if (wGestureMasks(window))
++ {
++ GestureClientsPtr client;
++
++ /* For each client */
++ for (client = wGestureMasks(window)->clients; client;
++ client = client->next)
++ {
++ int first = 1;
++
++ /* If the client has set the SYSFLAG1 bit */
++ if (BitIsOn(client->gestureMask[0], GRAIL_TYPE_SYSFLAG1))
++ {
++ /* For each recognized gesture */
++ grail_mask_foreach(type, types, type_bytes)
++ {
++ if (type == GRAIL_TYPE_SYSFLAG1)
++ continue;
++
++ /*
++ * Check if this client selected for this gesture.
++ * Request may be for this device or all devices.
++ */
++ if (BitIsOn(client->gestureMask[pInfo->dev->id], type) ||
++ BitIsOn(client->gestureMask[0], type))
++ {
++ if (first) {
++ /* Set up new client in array */
++ clients[0].id.client = CLIENT_ID(client->resource);
++ clients[0].id.root = root_window->drawable.id;
++ clients[0].id.child = child_window->drawable.id;
++ clients[0].id.event = window->drawable.id;
++ grail_mask_clear(clients[0].mask,
++ DIM_GRAIL_TYPE_BYTES);
++ first = 0;
++ }
++
++ /* Set this gesture bit in the client's gesture mask */
++ SetBit(clients[0].mask, type);
++ num_clients = 1;
++ }
++ }
++
++ /*
++ * Either we found a gesture, or we stop looking for SYSFLAG1
++ * clients.
++ */
++ if (num_clients) {
++ SetBit(clients[0].mask, GRAIL_TYPE_SYSFLAG1);
++ goto next_window;
++ }
++ }
++ }
++ }
++
++next_window:
++ window = window->parent;
++ }
++
++ /*
++ * Traverse the window hierarchy looking for a window with a client
++ * selecting for one of the recognized gestures.
++ *
++ * All clients of the top most window with a match will receive events if
++ * they have selected for gestures that have been recognized, even if they
++ * have selected for different gestures between them.
++ *
++ * Once any gesture is matched on a window, propagation through the window
++ * hierarchy ends.
++ */
++ for (window = child_window; window && !found_match; window = window->parent)
++ {
++ /* No client selected for gestures on this window */
++ if (!wGestureMasks(window))
++ continue;
++
++ /* For each recognized gesture */
++ grail_mask_foreach(type, types, type_bytes)
++ {
++ if (type == GRAIL_TYPE_SYSFLAG1)
++ continue;
++
++ /* Check if any client selected for this gesture on the window */
++ if (BitIsOn(wGestureMasks(window)->mask, type))
++ {
++ GestureClientsPtr client;
++
++ /* For each client that selected for gestures on this window */
++ for (client = wGestureMasks(window)->clients; client;
++ client = client->next)
++ {
++ /*
++ * Check if this client selected for this gesture. Request
++ * may be for this device or all devices.
++ */
++ if (BitIsOn(client->gestureMask[pInfo->dev->id], type) ||
++ BitIsOn(client->gestureMask[0], type))
++ {
++ /*
++ * Find this client in the clients array passed back to
++ * the caller.
++ */
++ for (j = 0; j < num_clients; j++)
++ if (clients[j].id.client ==
++ CLIENT_ID(client->resource))
++ break;
++
++ /* Check if the client exists in the array yet */
++ if (j >= num_clients)
++ {
++ /* We ran out of room in the array, return error */
++ if (num_clients >= max_clients)
++ return -1;
++ /* Set up new client in array */
++ clients[j].id.client = CLIENT_ID(client->resource);
++ clients[j].id.root = root_window->drawable.id;
++ clients[j].id.child = child_window->drawable.id;
++ clients[j].id.event = window->drawable.id;
++ num_clients++;
++ }
++
++ /* Set this gesture bit in the client's gesture mask */
++ SetBit(clients[j].mask, type);
++ }
++ }
++
++ /* A match has been found, stop propagating */
++ found_match = 1;
++ }
++ }
++ }
++
++ return num_clients;
++}
++
++static void GrailEvent(struct grail *grail, const struct input_event *ev)
++{
++ InputInfoPtr pInfo = (InputInfoPtr)grail->priv;
++ SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
++ struct SynapticsHwState hw;
++ int delay = 0;
++ Bool newDelay = FALSE;
++
++ if (EventProcessEvent(pInfo, &priv->comm, &hw, ev)) {
++ hw.millis = GetTimeInMillis();
++ priv->hwState = hw;
++ delay = HandleState(pInfo, &hw);
++ newDelay = TRUE;
++ }
++
++ if (newDelay)
++ priv->timer = TimerSet(priv->timer, 0, delay, timerFunc, pInfo);
++}
++
++static void GrailGesture(struct grail *grail, const struct grail_event *ev)
++{
++ InputInfoPtr pInfo = grail->priv;
++ int x;
++ int y;
++
++ DeviceIntPtr master = pInfo->dev->u.master;
++
++ /* If this mouse isn't hooked up to a cursor, don't do anything */
++ if (!master)
++ return;
++
++ /* Note: Master device valuators are in screen coordinates */
++ x = master->last.valuators[0];
++ y = master->last.valuators[1];
++
++ xf86PostGestureEvent(pInfo->dev, x, y, ev->client_id.client, ev->id,
++ ev->type, ev->client_id.root, ev->client_id.event,
++ ev->client_id.child, ev->status,
++ ev->nprop, (float *)ev->prop);
++}
++
++int
++GrailOpen(InputInfoPtr pInfo)
++{
++ SynapticsPrivate *priv = pInfo->private;
++ EventcommPrivate *ecpriv = priv->proto_data;
++
++ ecpriv->grail = malloc(sizeof(struct grail));
++ if (!ecpriv->grail) {
++ xf86Msg(X_ERROR, "%s: failed to allocate grail structure\n",
++ pInfo->name);
++ return -1;
++ }
++
++ memset(ecpriv->grail, 0, sizeof(struct grail));
++ ecpriv->grail->get_clients = GetClients;
++ ecpriv->grail->event = GrailEvent;
++ ecpriv->grail->gesture = GrailGesture;
++ ecpriv->grail->priv = pInfo;
++
++ if (grail_open(ecpriv->grail, pInfo->fd)) {
++ xf86Msg(X_INFO, "%s: failed to open grail, no gesture support\n",
++ pInfo->name);
++ free(ecpriv->grail);
++ ecpriv->grail = NULL;
++ return -1;
++ }
++
++ {
++ struct grail_coord min;
++ struct grail_coord max;
++
++ min.x = screenInfo.screens[0]->x;
++ min.y = screenInfo.screens[0]->y;
++ max.x = min.x + screenInfo.screens[0]->width;
++ max.y = min.y + screenInfo.screens[0]->height;
++
++ grail_set_bbox(ecpriv->grail, &min, &max);
++ }
++
++ return 0;
++}
++
++void
++GrailClose(InputInfoPtr pInfo)
++{
++ SynapticsPrivate *priv = pInfo->private;
++ EventcommPrivate *ecpriv = priv->proto_data;
++
++ if (ecpriv->grail) {
++ grail_close(ecpriv->grail, pInfo->fd);
++ free(ecpriv->grail);
++ ecpriv->grail = NULL;
++ }
++}
+Index: xserver-xorg-input-synaptics/src/synaptics.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synaptics.c 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/src/synaptics.c 2011-07-05 11:55:02.771347676 +0300
+@@ -119,7 +119,6 @@
+ static void SynapticsUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags);
+ static Bool DeviceControl(DeviceIntPtr, int);
+ static void ReadInput(InputInfoPtr);
+-static int HandleState(InputInfoPtr, struct SynapticsHwState*);
+ static int ControlProc(InputInfoPtr, xDeviceCtl*);
+ static int SwitchMode(ClientPtr, DeviceIntPtr, int);
+ static Bool DeviceInit(DeviceIntPtr);
+@@ -1219,7 +1218,7 @@
+ return inside_area;
+ }
+
+-static CARD32
++CARD32
+ timerFunc(OsTimerPtr timer, CARD32 now, pointer arg)
+ {
+ InputInfoPtr pInfo = arg;
+@@ -2422,7 +2421,7 @@
+ * milliseconds to wait before calling the function again if no state change
+ * occurs.
+ */
+-static int
++int
+ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw)
+ {
+ SynapticsPrivate *priv = (SynapticsPrivate *) (pInfo->private);
+Index: xserver-xorg-input-synaptics/src/synproto.h
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/synproto.h 2011-07-05 11:54:55.781347674 +0300
++++ xserver-xorg-input-synaptics/src/synproto.h 2011-07-05 11:55:02.771347676 +0300
+@@ -105,4 +105,7 @@
+ #endif /* BUILD_PSMCOMM */
+ extern struct SynapticsProtocolOperations alps_proto_operations;
+
++extern int HandleState(InputInfoPtr, struct SynapticsHwState*);
++extern CARD32 timerFunc(OsTimerPtr timer, CARD32 now, pointer arg);
++
+ #endif /* _SYNPROTO_H_ */
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/105_correct_multifinger_click.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/105_correct_multifinger_click.patch
@@ -0,0 +1,14 @@
+diff -Nur xfree86-driver-synaptics-0.99.3.orig/src/synaptics.c xfree86-driver-synaptics-0.99.3/src/synaptics.c
+--- xfree86-driver-synaptics-0.99.3.orig/src/synaptics.c 2008-12-15 00:33:15.000000000 +0100
++++ xfree86-driver-synaptics-0.99.3/src/synaptics.c 2009-01-31 18:40:37.000000000 +0100
+@@ -411,8 +411,8 @@
+ /* Enable multifinger-click if we don't have right/middle button,
+ otherwise clickFinger is always button 1. */
+ clickFinger1 = 1;
+- clickFinger2 = priv->has_right ? 1 : 3;
+- clickFinger3 = priv->has_middle ? 1 : 2;
++ clickFinger2 = priv->has_right ? 1 : 2;
++ clickFinger3 = priv->has_middle ? 1 : 3;
+
+ /* Enable vert edge scroll if we can't detect doubletap */
+ vertEdgeScroll = priv->has_double ? FALSE : TRUE;
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/201_fix_clickfinger_clickpad_actions.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/201_fix_clickfinger_clickpad_actions.patch
@@ -0,0 +1,115 @@
+From 5201038f7d4a58f78d9bcbf340fb4a50958c6ab0 Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Wed, 21 Mar 2012 12:43:58 -0700
+Subject: [PATCH 1/2] Keep track of which touch slots are open
+
+This change adds a new touch slot state that denotes when the slot is
+open but does not have any new data to report.
+
+Signed-off-by: Chase Douglas
+---
+ src/eventcomm.c | 3 ++-
+ src/synproto.c | 13 ++++++++++++-
+ src/synproto.h | 1 +
+ 3 files changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/src/eventcomm.c b/src/eventcomm.c
+index f199c24..3721c91 100644
+--- a/src/eventcomm.c
++++ b/src/eventcomm.c
+@@ -557,7 +557,8 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw,
+ {
+ int slot_index = last_mt_vals_slot(priv);
+
+- if (hw->slot_state[slot_index] == SLOTSTATE_EMPTY)
++ if (hw->slot_state[slot_index] == SLOTSTATE_EMPTY ||
++ hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY)
+ hw->slot_state[slot_index] = SLOTSTATE_UPDATE;
+ if (ev->code == ABS_MT_TRACKING_ID)
+ {
+diff --git a/src/synproto.c b/src/synproto.c
+index bdf2d21..19a13e5 100644
+--- a/src/synproto.c
++++ b/src/synproto.c
+@@ -152,7 +152,18 @@ SynapticsResetTouchHwState(struct SynapticsHwState *hw)
+ for (j = 2; j < valuator_mask_num_valuators(hw->mt_mask[i]); j++)
+ valuator_mask_unset(hw->mt_mask[i], j);
+
+- hw->slot_state[i] = SLOTSTATE_EMPTY;
++ switch (hw->slot_state[i])
++ {
++ case SLOTSTATE_OPEN:
++ case SLOTSTATE_OPEN_EMPTY:
++ case SLOTSTATE_UPDATE:
++ hw->slot_state[i] = SLOTSTATE_OPEN_EMPTY;
++ break;
++
++ default:
++ hw->slot_state[i] = SLOTSTATE_EMPTY;
++ break;
++ }
+ }
+ #endif
+ }
+diff --git a/src/synproto.h b/src/synproto.h
+index 95ebc92..e16aeb0 100644
+--- a/src/synproto.h
++++ b/src/synproto.h
+@@ -42,6 +42,7 @@ enum SynapticsSlotState
+ SLOTSTATE_EMPTY = 0,
+ SLOTSTATE_OPEN,
+ SLOTSTATE_CLOSE,
++ SLOTSTATE_OPEN_EMPTY,
+ SLOTSTATE_UPDATE,
+ };
+
+--
+1.7.9.1
+
+From c229afff677daef0e5960cf334b29f1a0af38fcf Mon Sep 17 00:00:00 2001
+From: Chase Douglas
+Date: Wed, 21 Mar 2012 12:45:09 -0700
+Subject: [PATCH 2/2] Include open but unchanged touches when guessing
+ clickfingers
+
+On a clickpad, when the button is pressed the clickfinger guessing will
+only work properly if all touches have new data to report. If a touch
+has not changed, then it will not be counted. This leads to inaccurate
+finger counts.
+
+This change ensures that all active touches are counted. Note that the X
+and Y valuators of active but unchanged touches are still valid.
+
+Signed-off-by: Chase Douglas
+---
+ src/synaptics.c | 7 ++++---
+ 1 files changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/synaptics.c b/src/synaptics.c
+index e22929b..3c5b12d 100644
+--- a/src/synaptics.c
++++ b/src/synaptics.c
+@@ -2600,8 +2600,8 @@ clickpad_guess_clickfingers(SynapticsPrivate *priv, struct SynapticsHwState *hw)
+ for (i = 0; i < hw->num_mt_mask - 1; i++) {
+ ValuatorMask *f1;
+
+- /* you can't click on open, you're not fast enough */
+- if (hw->slot_state[i] != SLOTSTATE_UPDATE)
++ if (hw->slot_state[i] == SLOTSTATE_EMPTY ||
++ hw->slot_state[i] == SLOTSTATE_CLOSE)
+ continue;
+
+ f1 = hw->mt_mask[i];
+@@ -2610,7 +2610,8 @@ clickpad_guess_clickfingers(SynapticsPrivate *priv, struct SynapticsHwState *hw)
+ ValuatorMask *f2;
+ double x1, x2, y1, y2;
+
+- if (hw->slot_state[j] != SLOTSTATE_UPDATE)
++ if (hw->slot_state[j] == SLOTSTATE_EMPTY ||
++ hw->slot_state[j] == SLOTSTATE_CLOSE)
+ continue;
+
+ f2 = hw->mt_mask[j];
+--
+1.7.9.1
+
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/123_order_ProcessTouch_for_numFingers.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/123_order_ProcessTouch_for_numFingers.patch
@@ -0,0 +1,20 @@
+Index: xserver-xorg-input-synaptics/src/eventcomm.c
+===================================================================
+--- xserver-xorg-input-synaptics.orig/src/eventcomm.c 2011-07-05 11:55:12.731347678 +0300
++++ xserver-xorg-input-synaptics/src/eventcomm.c 2011-07-05 11:55:17.051347678 +0300
+@@ -555,6 +555,7 @@
+ case EV_SYN:
+ switch (ev->code) {
+ case SYN_REPORT:
++ ProcessTouch(pInfo, priv);
+ if (priv->has_touch && ecpriv->active_touches < 2)
+ hw->numFingers = ecpriv->active_touches;
+ else if (comm->oneFinger)
+@@ -566,7 +567,6 @@
+ else
+ hw->numFingers = 0;
+ *hwRet = *hw;
+- ProcessTouch(pInfo, priv);
+ return TRUE;
+ }
+ case EV_KEY:
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/patches/115_evdev_only.patch
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/patches/115_evdev_only.patch
@@ -0,0 +1,13 @@
+Prevent non-evdev devices from firing the eventcomm AutoDevProbe callback.
+
+Index: xserver-xorg-input-synaptics/conf/50-synaptics.conf
+===================================================================
+--- xserver-xorg-input-synaptics.orig/conf/50-synaptics.conf 2011-07-05 11:54:33.911347672 +0300
++++ xserver-xorg-input-synaptics/conf/50-synaptics.conf 2011-07-05 11:54:53.411347674 +0300
+@@ -14,5 +14,5 @@
+ # This option is recommend on all Linux systems using evdev, but cannot be
+ # enabled by default. See the following link for details:
+ # http://who-t.blogspot.com/2010/11/how-to-ignore-configuration-errors.html
+-# MatchDevicePath "/dev/input/event*"
++ MatchDevicePath "/dev/input/event*"
+ EndSection
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/local/66-xorg-synaptics-quirks.rules
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/local/66-xorg-synaptics-quirks.rules
@@ -0,0 +1,13 @@
+ACTION!="add|change", GOTO="xorg_synaptics_quirks_end"
+KERNEL!="event*", GOTO="xorg_synaptics_quirks_end"
+
+ENV{ID_INPUT_TOUCHPAD}!="1", GOTO="xorg_synaptics_quirks_end"
+
+# Placeholder for platform specific quirks needing
+# ID_INPUT.tags to be set.
+ATTR{[dmi/id]product_name}=="Inspiron 1011", ENV{ID_INPUT.tags}="inspiron_1011"
+ATTR{[dmi/id]product_name}=="Inspiron 1012", ENV{ID_INPUT.tags}="inspiron_1012"
+ATTR{[dmi/id]product_name}=="Inspiron 1120", ENV{ID_INPUT.tags}="inspiron_1120"
+ATTR{[dmi/id]product_name}=="HP MiniNote 1000", ENV{ID_INPUT.tags}="mininote_1000"
+
+LABEL="xorg_synaptics_quirks_end"
--- xserver-xorg-input-synaptics-1.5.99.901.orig/debian/local/51-synaptics-quirks.conf
+++ xserver-xorg-input-synaptics-1.5.99.901/debian/local/51-synaptics-quirks.conf
@@ -0,0 +1,23 @@
+Section "InputClass"
+ Identifier "Dell Inspiron embedded buttons quirks"
+ MatchTag "inspiron_1011|inspiron_1012"
+ MatchDevicePath "/dev/input/event*"
+ Driver "synaptics"
+ Option "JumpyCursorThreshold" "90"
+EndSection
+
+Section "InputClass"
+ Identifier "Dell Inspiron quirks"
+ MatchTag "inspiron_1120"
+ MatchDevicePath "/dev/input/event*"
+ Driver "synaptics"
+ Option "JumpyCursorThreshold" "250"
+EndSection
+
+Section "InputClass"
+ Identifier "HP Mininote quirks"
+ MatchTag "mininote_1000"
+ MatchDevicePath "/dev/input/event*"
+ Driver "synaptics"
+ Option "JumpyCursorThreshold" "20"
+EndSection