commit 947d96faabc7267177da32fbfc9f8c3a81b576af
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Feb 1 15:53:14 2013 +1000

    synaptics 1.6.3
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 3b02d3061e58097ab5644b85250ed48e5ef0b02a
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Jan 4 16:08:47 2013 +1000

    conf: add example for AreaBottomEdge on clickpad buttons
    
    Those that use clickpad buttons as buttons can see cursor jumps as the press
    on the touchpad - largely caused by the finger changing shape as the
    pressure changes and thus moving the hotspot.
    
    Simple fix is to define the clickpad soft button areas as dead areas, but
    this cannot be set as general option as it would break for those that use
    tapping.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 2159b5d26207c83efea6efca7fa5765df95a4219)

commit f23991d3c2bbf25d467ddd6d850acd5bca3cd4b2
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Jan 17 19:22:03 2013 +1000

    synaptics 1.6.2.901
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit cb883766ec07b3380541fe9248aa46f07c39c338
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Aug 23 16:22:31 2012 +1000

    Recognise the soft button area property before clickpad is enabled
    
    Otherwise the driver has no internal reference to the soft button area
    property and will ignore any setting.
    
    Also, if a client sets this property, we claim it as our own and disallow
    deletion.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 86460318ba5606ef41712b52e50bf7b2ba083226)

commit 7d1df986e1330a02cfb74a0babae1ae78768aa52
Author: Daniel Stone <daniel@fooishbar.org>
Date:   Sat Dec 29 03:24:52 2012 +0000

    Free mtdev device as well as closing it
    
    mtdev_close_delete() is to mtdev_new_open() as mtdev_close() is to
    mtdev_open().  So, since we're using mtdev_new_open(), we need to use
    mtdev_close_delete() instead of just mtdev_close() to actually free
    everything.
    
    Fixes an eventual failure to open the touchpad device after a lot of
    suspend/resume cycles.
    
    [whot: amended to mtdev_close_delete in evdev_query_touch]
    
    Signed-off-by: Daniel Stone <daniel@fooishbar.org>
    Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit ce7565ea6683f594f1f2ab5769bf60b1337d70bd)

commit 04439c088b6d17e6ed374c185a82ca82fe93d0d3
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 25 14:20:39 2012 +1000

    Use LogMessageVerbSigSafe on ABI 18
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit e28575b29b394b38f1d92b75353fc0fe82838b7c)

commit cf117e2b0d995e9a044914b66c237c157c86d71c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Oct 8 11:10:44 2012 +1000

    test: drop xf86CheckStrOption from fake symbols
    
    The tests don't need this symbol anymore.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 3cb14dcccf5574366d90e24f351e3ad04b35e35f)
    
    Conflicts:
    	test/fake-symbols.c
    	test/fake-symbols.h

commit eebb562e92349f428463b241f371b420c93b5081
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Dec 21 10:37:34 2012 +1000

    Allow dead areas to update the button state
    
    On clickpads, a dead area helps prevent pointer movement when the buttons
    are pressed. Thus check for the button state before resetting the hw state
    in case we get a right-click in the soft button area.
    
    For clickfinger, the effect is that clickfinger events are now triggered if
    the finger rests in the dead area.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit a5ac54f60af96b9b862425ccd8b6c7afaa4937e4)
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    
    Conflicts:
    	src/synaptics.c

commit eae444eb1a85d2401501d29f9a6c654c046f806b
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Aug 30 16:38:38 2012 +1000

    Reset num_active_touches on DeviceOff (#52496)
    
    When disabling the device, reset num_active_touches to zero. Otherwise,
    num_active_touches stays at the value it was on DeviceOff(). Future touches
    add to that value until the index may go past priv->open_slots[].
    That causes spurious memory corruption on touch ends.
    
    And as of 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e we ignore pre-existing
    touches anyway.
    
    Test-case:
    - place num_touches fingers on the touchpad
    - xinput disable <device>
    - lift fingers
    - xinput enable <device>
    - place finger on device, num_active_touches is now (num_touches + 1)
    
    X.Org Bug 52496 <http://bugs.freedesktop.org/show_bug.cgi?id=52496>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit a245d42f53096b1ae81e6702729f97ca508e5b5b)
    
    Conflicts:
    	src/synaptics.c

commit d5ff9d8b0b186cf39695df84a10984eac559b746
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Jun 12 13:46:34 2012 +1000

    synaptics 1.6.2
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit c1aae820601a911432c64938f03eab62bafaab2f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 18 09:38:50 2012 +1000

    synaptics 1.6.1.901
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 7ccca8e7d8fbf2ccb5a2dbbfbf06ff4dbd6b7149
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 17 12:10:04 2012 +1000

    Don't allow for scroll distances of 0 (#49965)
    
    It'll either hang the server or blow up with divisions by 0, whichever one
    comes first.
    
    X.Org Bug 49965 <http://bugs.freedesktop.org/show_bug.cgi?id=49965>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit 6d47d334d8a876e7e094306c313246b87016b78a)

commit f8d970e191e6df05a8f2c26afdeea3e27b941a62
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 17 11:02:02 2012 +1000

    Reset hw->x/y to INT_MIN and skip HandleState until we have x/y events
    
    The driver assumes x/y is always valid but after coming from a resume we may
    get a few events with either ABS_X or ABS_Y (not both). Thus we process with
    hw->x == 0 and hw->y == somevalue, causing cursor jumps when calculating
    deltas whenver the real hw->x comes in.
    
    Fix this by resetting hw->x/y to INT_MIN and skip state processing until
    both axes are available.
    
    For clickpads, this means handling of data will be delayed until we get
    at least one motion on each axis. Button presses won't be recognised either
    until that happens. It requires some skill to not trigger motion on both
    axes, even more to press a button without doing so.
    
    For non-clickpads, handling of motion events will be delayed likewise. If a
    physical button is pressed immediately after resume we have to assume deltas
    of x/y.
    - If the next event is a new touch, it will have ABS_X/ABS_Y set anyway
    - If the finger was already down, a button event is generated, and the
      finger has generated ABS_X or ABS_Y only before the event, the next event
      containing the missing data will cause a jump. The fix for this is more
      invasive and this is quite a corner-case.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit cd569377cda9b5a4ee00c0137db14f625c76c40f)

commit 739175d198372a3226ce061b118d8fe5bbc8f6bf
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed May 16 07:49:25 2012 -0700

    Reset open slots array on device disable
    
    The open slots array is used for clickpad cumulative delta computation.
    If the array is not reset and becomes corrupted during the device
    disable/enable cycle, the cumulative deltas may be wrong. This manifests
    as jumpy cursor behavior on some clickpads after suspend/resume.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0054b144f3daf00e46a35b2f165befb209df94fc)

commit 67a02d676c96d5b3d4729290cd96af0201eb76bb
Author: Chun Yang <Chuck.Yang@gmail.com>
Date:   Tue May 15 14:51:42 2012 -0500

    Fix coasting for negative ScrollDelta
    
    Fix the coasting direction for when VertScrollDelta or HorizScrollDelta is
    negative.
    
    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=49966
    
    Regression introduced in 0de4445ff8e75aab208faf6383e76045934c6720
    
    Signed-off-by: Chun Yang <Chuck.Yang@gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 53557a5cab1e253dc8f4393207954ae0fe76068f)

commit 23e87b57bb874326c88a7ad7292bec51959fb876
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon May 14 10:20:01 2012 -0700

    Ignore pre-existing touches
    
    If a touch is physically active when the device is enabled, then all
    events for that touch must be ignored. In particular, we cannot close
    the touch or we will decrement touch count counters below zero. If these
    counters go below zero memory corruption can occur.
    
    Note that a device is disabled and enabled every time the user types on
    the keyboard if synclient is used to disable the trackpad while typing.
    This is a very common option.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e)

commit 23065a974e5dcdf0d6a436a0547bb7887d306a6f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 12:27:39 2012 +1000

    Avoid out-of-bounds access by running num_active_touches < 0 (#49439)
    
    If a touch is active during driver init, the slot will be set to
    SLOTSTATE_CLOSE when it finishes. That could decrease num_active_touches to
    less than 0, causing out-of-bounds access.
    
    X.Org Bug 49439 <http://bugs.freedesktop.org/show_bug.cgi?id=49439>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit 77d766b1d535dff9a27c7db343ede85d9f44850b)

commit e0f5688994baa85a8c658120681575cdd0ba2a58
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 10:30:21 2012 +1000

    synaptics 1.6.1
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 7f2d9d88204c62de3cb63b48001b9e2408d3a20d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri May 11 10:54:47 2012 +1000

    tools: coasting speed is not capped at 20, cap it at 255
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0352c67fa2a7224b5a3bf03a934b3c7af42b4f51)

commit ace20a02c371478f6a9d224dfd31ea219d91fc46
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 9 14:26:40 2012 +1000

    Fix coasting speed trigger
    
    CoastingSpeed is defined as scrolls/s. The previous code just used
    delta/seconds which depended on the device coordinate range and exceeded the
    default CoastingSpeed at almost any scroll event.
    
    Divide the estimated delta by the scroll distance to get the accurate
    scrolls/s number. Since that now changes the contents of what's in
    coast_speed_y, change the users of that too.
    
    http://bugzilla.redhat.com/813686
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    (cherry picked from commit 0de4445ff8e75aab208faf6383e76045934c6720)

commit 04d24116db59872d4cd00f38a0d1c87957fe4914
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 9 12:23:46 2012 +1000

    Don't check for soft buttons if a button is already down
    
    Moving into a different soft button's area during drag-n-drop would trigger
    a click of that button.
    
    We only have the current button state and we mess with it, so the conditions
    for a possible clickpad soft-button event are:
    - hw->left is down now
    - none of left|right|middle were down before. since we change hw->left to
      hw->right/left we need to check all three
    
    If hw->left is down but one of the other buttons was already down, copy that
    button state and continue.
    
    http://bugzilla.redhat.com/819348
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit a1d6784d790f081f8a6ea3a10d3cfa578aa10d5b)

commit 4e8ddb3a6f1ba1f7642f0a23d6f22a8c40d68cf0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 12:00:50 2012 +1000

    whitespace fix
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit d1eebac72e4a5cc7a67efead13fbd32f9cd1fbd9
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 14:21:24 2012 +1000

    tools: undo indentation in synclient's parameter list
    
    more more readable this way
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 0434d7776640861d0c8c19a02c2445d2f61627f8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 11:49:31 2012 +1000

    Indent consistently
    
    x-indent-all.sh from xorg/util/modular as of
    c2d630fab65dbe3409af3947f6f442782ddb026f
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit a1162f80324c379bc7581e53275e8ff6d569f8b0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu May 3 08:06:32 2012 +1000

    synaptics 1.6.0
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 52e194b76c9598e0fbf556e3aa97168ed4f0e2b6
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 2 10:16:30 2012 +1000

    Fix coasting for negative scroll directions
    
    1874094f0e99d8db319f6cf769ce5a25c9bc490c introduced negative scroll
    directions. Coasting assumed always-positive increments and triggered an
    endless scrolling loop.
    
    Reported-by: Matthias Clasen <mclasen@redhat.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 6f086b86e4bd3c720289e91fdbb933bf3e559e72
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed May 2 09:16:27 2012 +1000

    Fail if no backends can be found
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 655d3100fc3f06e714ec4aa01607d86509952e4b
Author: Niveditha Rau <niveditha.rau@oracle.com>
Date:   Mon Apr 30 14:51:07 2012 -0700

    Include a build for solaris
    
    Signed-off-by: Niveditha Rau <niveditha.rau@oracle.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit d13e83b921a398b9472b07874cf5061c8a0ea6a6
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 30 11:39:49 2012 +1000

    Force SLOTSTATE_EMPTY on DeviceOff
    
    SLOTSTATE_OPEN_EMPTY on resume leads to erroneously detected touches.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit cc595bd323aab2b0ef7b41fded2f0b5571cf0a8e
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 30 10:47:14 2012 +1000

    Reset all hardware state on DEVICE_OFF (#49161)
    
    Reset all state on DeviceOff to avoid stuck buttons on resume.
    
    X.Org Bug 49161 <http://bugs.freedesktop.org/show_bug.cgi?id=49161>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit e19fff64f76200291c22d6b822bb4e8b06816745
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 30 09:30:53 2012 +1000

    man: fix hyphenation
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 3cc828b4764c101f9acd0db9ee3638036ec7a948
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 30 09:28:39 2012 +1000

    man: drop mention of shm configuration
    
    SHM is for debugging only now, not configuration.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 085662e9fe13d46b9633f1b7b9e8f95bacdec30c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Apr 27 09:20:56 2012 +1000

    synaptics 1.5.99.904
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 58581bfbecfc15e7fa63c2fa4be20d2b0654f9b8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Apr 26 12:00:49 2012 +1000

    Reset scroll delta when no finger is touching
    
    Provides for a more consistent scrolling experience, otherwise delta
    leftovers may trigger extra events even when the actual scrolling action
    stays the same.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 1a76d9f00e1e54ba912a47aa665968e0cfe1b8a0
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Apr 26 11:47:19 2012 +1000

    Don't unconditionally divide by scroll_dist_vert (#46617)
    
    Regression introduced in cddab79c408db3b13905a2be72aff4f7bf1406f8.
    
    If an event has a delta of less than scroll_dist_vert, the delta is
    unconditionally divided by the distance, leaving some remainder close to 0
    and never actually triggering the scroll amount.
    
    Fix this by working with the increment, not the normalised values.
    
    X.Org Bug 46617 <http://bugs.freedesktop.org/show_bug.cgi?id=46617>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit ba31b09ba8aff6b8f3b0590e724183b0d2802ffc
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Apr 26 10:03:28 2012 +1000

    ClickPad is most definitely a bool option.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit f0c2f1d82a21de315a0088dd28ffeb394cf32c8e
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Apr 26 09:27:05 2012 +1000

    Init num_touches to 0 on start
    
    We implicitly rely on this already since we calloc the struct. Do it
    expliclity on DeviceOn().
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 9ecf505c6473c65cd850a58b1b6eeb86f7d390e6
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Apr 24 15:31:36 2012 +1000

    Reset touch state on DeviceOff (#49161)
    
    Don't leave touches lingering around during suspend.
    
    Test case:
    1) leave finger on touchpad
    2) xinput set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 0
    3) lift fingers
    4) xinput set-prop "SynPS/2 Synaptics TouchPad" "Device Enabled" 1
    
    X.Org Bug 49161 <http://bugs.freedesktop.org/show_bug.cgi?id=49161>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit f300adb027b856c944e0e25d0f32948823fe6b62
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Apr 23 15:39:57 2012 -0700

    Update src/synproto.c license to the preferred MIT/X11 license
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 5a176dc23d7dfb4648fef50ac0af144026b45078
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Apr 20 11:13:16 2012 +1000

    Don't release the button on TS_3 if TapAndDrag is disabled (#31854)
    
    TS_3 is second tap down. Unconditionally set the button as down, later, in
    HandleTapProcessing we have the required conditions to reset it to TS_START
    and TBS_BUTTON_UP.
    
    Meanwhile, TBS_BUTTON_DOWN stays down, so the second tap is counted and sent
    as button event. This restores double-tapping if TapAndDrag is disabled.
    
    X.Org Bug 31854 <http://bugs.freedesktop.org/show_bug.cgi?id=31854>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 0322d301844a7e78fc9aa4ec6493bf50bc7f926c
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Apr 20 11:10:47 2012 +1000

    Print millis as unsigned int
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 3822d58777768b351940e58d8608ba9ab877d134
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Apr 19 16:39:41 2012 +1000

    Ensure hw millis are monotonic (#48777)
    
    The eventcomm backend takes the timestamp from the kernel, but the timer
    uses the timer's "now". This timestamp may be later than the one from the
    next event we read from the kernel, causing a negative dtime in get_delta()
    and a cursor jump by (unsigned int)-1.
    
    Ensure that the new event's timestamp is at least the last used one.
    
    X.Org Bug 48777 <http://bugs.freedesktop.org/show_bug.cgi?id=48777>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Tested-by: Gavin Troy <gavtroy@gmail.com>

commit 11d8929647a67258ca86121a45ea638ca7299237
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Apr 18 09:30:06 2012 +1000

    man: move ClickPad documentation into a single area
    
    Having to read only one section is a tad easier than collecting the separate
    options.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 1c155f644824133315ac5b3dac9076db71430eb6
Author: Chow Loong Jin <hyperair@debian.org>
Date:   Mon Apr 16 11:39:44 2012 +0800

    Fix coasting friction
    
    As a result of commit 5a1612d4496b51682c9043aa064025c545249de6, coasting speed
    was bumped up to a different scale by removing the divisor during the
    calculation of initial coasting speed. This caused coasting friction to have
    little to no effect, resulting in coasting that lasted virtually forever using
    the default coasting friction value of 50.
    
    This patch multiplies the scroll_dist_{horiz,vert} which was previously used as
    a divisor for initial coasting speed to the coasting friction before deducting
    it at each step, thus bringing coasting friction back under control.
    
    Signed-off-by: Chow Loong Jin <hyperair@debian.org>
    Tested-by: <Magnus.Kessler@gmx.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 50124d3ddf9bbc4be6734b47a273dbd46b4db0ba
Author: Pierre Lulé <pierre@lule.fr>
Date:   Mon Apr 16 12:01:56 2012 +0200

    Stop coasting when two-finger scroll begins
    
    There is currently a problem that can lead the coasting to continue while scrolling in a particular situation :
    with
     Option "VertTwoFingerScroll" "on"
     Option "CornerCoasting" "0"
     Option "CoastingSpeed" "10"
     Option "CoastingFriction" "50"
     Option "CornerCoasting" "0"
    If you scroll down with two finger then raise a finger, coasting will start. But if you put down that finger and try to
    scroll up, the inertia will still scroll down while you scroll up. This can look like a very particular situation, but
    happens to me often while scrolling in a big document.
    
    This (awfully simple) patch stop coasting when detecting two-finger scroll.
    
    Signed-off-by: Pierre Lulé <pierre@lule.fr>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit d90003383cbec75da88bf1a88b886b1131597f3f
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Mon Apr 16 16:47:38 2012 +1000

    synaptics 1.5.99.903
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 1874094f0e99d8db319f6cf769ce5a25c9bc490c
Author: Alyssa Hung <ahung@isisview.org>
Date:   Fri Apr 13 01:04:38 2012 -0400

    Support inverted scroll direction.
    
    This patch allows scroll direction to be inverted by allowing
    VertScrollDelta and HorizScrollDelta to be set to negative values. This
    enables behaviour that is consistent with modern touchscreen devices,
    where the content scrolls in the same direction as the user's finger
    movement.
    
    Signed-off-by: Alyssa Hung <ahung@isisview.org>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 38b93b71c812c6d7b7085f40d049b0a4927e52dd
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Apr 2 11:23:05 2012 -0700

    Use maximum number of touches reported by evdev
    
    This resolves a regression from da461b91659d0c64aa6827e065aee2682116a57e
    where three touch tap and click actions on certain devices no longer
    work.
    
    Some devices report a higher touch count than the number of touches they
    can provide data for. For example, many Synaptics touchpads can report
    up to five touches, but only provide data for two of them. We need to be
    able to report the correct number of touches for these devices when
    there are three touches. Using the maximum of the reported touch count
    and the number of touches provided ensures the count is accurate for all
    device types.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 5a1612d4496b51682c9043aa064025c545249de6
Author: Pierre Lulé <pierre@lule.fr>
Date:   Wed Mar 28 00:13:30 2012 +0200

    Fix coasting speed
    
    Fixes a bug introduced in commit 2603ad69b997c999404ecc441e0d64ea2cc22018
    (Use the scroll distances as increment for scrolling valuator axes)
    
    Since this commit, scroll distance was set with SetScrollValuator function
    but it was still used as a divisor to calculate coasting,
    thus making coasting too slow. (at least on my computer)
    
    Deleting the divisor fixes the issue.
    
    A report of the same bug : https://bugs.archlinux.org/task/28955
    
    Signed-off-by: Pierre Lulé <pierre@lule.fr>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit f68ddd9be4202333a1c3ccf536966a96dc0bfde7
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Apr 10 13:06:49 2012 +1000

    Don't count fingers twice when guessing distance (#48316)
    
    A finger may be closer than the required distance to more than one finger.
    e.g. for fingers A, B, C, AB, AC and BC may trigger the check and count
    C twice -resulting in a 4 finger click.
    
    Avoid double-counting by marking those fingers already close enough to a
    previous finger to avoid overcounting.
    
    X.Org Bug 48316 <http://bugs.freedesktop.org/show_bug.cgi?id=48316>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit c745604461541c7b21779c60c9bd09ff1a390df2
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Apr 11 10:15:07 2012 +1000

    tools: skip non-existing properties
    
    If a property doesn't exist on a device, skip it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 8e297cb586ab855dc7c018c6f3f2f42c08db0419
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Apr 10 13:03:35 2012 +1000

    Replace hardcoded max number of touches with a define.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 3f9794a8a0f019a4b153941c9ec1927c7797ce6f
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Apr 9 11:38:16 2012 -0700

    Check touch record bounds before access
    
    We guess ten simultaneous touches if the device does not tell us. The
    Linux drivers for the Apple multitouch trackpads do not tell the number
    of simultaneous touches, but they can do more than ten. When this
    occurs, the array index into the touch records will be invalid. We must
    not process the touch or else we will segfault.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 4c87455f3ecd1b82a3612a3050e463a0efb90f0c
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 23 10:51:59 2012 -0700

    Do not perform a tap action when more than three touches
    
    Though this looks like a behavior change, it really isn't since the
    maximum tap_max_fingers that was previously possible was already handled.
    The only real change is that if a tap is recognized but the
    tap_max_fingers is zero, a tap will no longer be emitted. This shouldn't
    happen in the real world.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit da461b91659d0c64aa6827e065aee2682116a57e
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Fri Mar 23 10:51:58 2012 -0700

    Count number of multitouch touches for multitouch finger count
    
    The evdev protocol only goes up to three touches for non-multitouch
    devices. If you perform a four touch tap, the finger count will only go
    up to three touches if you roll your fingers, or will always be 0 if all
    four touches land at the same time.
    
    This change ensures the correct finger count is reported.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit bc95d90be17d52726b85c785a8e7503512e8fa3d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Sat Mar 24 19:52:35 2012 +1000

    Define various EVIOCGPROP bits if non-existent
    
    And make the ioctl conditional.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit 291fdc69801c91310839fc8667ba7aa2e9a66b95
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Mar 23 15:45:10 2012 +1000

    conf: the bcm5974 doesn't have Apple in the product name
    
    But it's still a single-button device from the known fruit manufacturer.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 4a80c0dc38ea4dafcb112191c2dd7e0082193263
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Fri Mar 23 10:38:20 2012 +1000

    synaptics 1.5.99.902
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit b6779458bcdb049480310ba1acb3991ad061ffc7
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 22 15:15:47 2012 +1000

    conf: enable right-button click by default on non-Apple clickpads
    
    The right-half of the bottom 18% of the touchpad are enabled as right button
    by default. On Apple touchpads (these don't have marking for the right
    button) disable them by default.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit c9cf8827b129a553ad3cd3d7ee6f463a6e94227d
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Mar 22 15:20:45 2012 +1000

    use xf86SetStrOption for SoftButtonAreas
    
    This way the option is reported in the log when parsed.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit cea97dd5e09b165c2a4b2bbbb5741a03f152ed37
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Mar 14 16:47:26 2012 +1000

    Allow soft button areas to be specified in % of the touchpad
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit b3348eb7e4e2187e11aa3c1cec2a58512759e6aa
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 21 12:58:30 2012 -0700

    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 <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit eba82d203e5e817a61180c6510d8de0d063ed05d
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 21 12:58:29 2012 -0700

    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 <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 73ec252b6f2d25cc49557b1d3789b459b60b8d4e
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 21 12:58:28 2012 -0700

    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 <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 93c72117e169624854f6eb63591702d7e4dae97c
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Wed Mar 21 12:58:27 2012 -0700

    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 <chase.douglas@canonical.com>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 5cde789fcafaed47c2533c4315e5c7d5548605f5
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Mar 14 13:24:32 2012 +1000

    Fix inverted circular scrolling direction
    
    Introduced in 26831a6eeac6762ad4d99532f62ebbab0827de10.
    In said commit, the old-style button events were changed to delta
    accumulation. Alas, for circular scrolling, a positive delta is up whereas
    for everything else a positive delta is down.
    
    Reported-by: Thomas Bächler <thomas@archlinux.org>
    Tested-by: Thomas Bächler <thomas@archlinux.org>
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit dd650a064b98b1c325a38e1370cc11059c257b07
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Mar 14 08:56:45 2012 +1000

    synaptics 1.5.99.901
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 6c457c0c61a0834361f45a073148db7b4c9be40b
Merge: defc1d0 fee18d8
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Wed Mar 14 08:48:00 2012 +1000

    Merge branch 'clickpad-v3'

commit fee18d8567efd2e5abf6b29eb1ae9ee0e3858013
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Tue Mar 13 16:08:12 2012 +1000

    Soft buttons are only available on clickpad devices, disable them otherwise.
    
    If the clickpad support is runtime enabled/disabled, the property
    appears/disappears accordingly.
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>

commit c546779b32d8be23475b3b062e3ebc9235365c0d
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Thu Feb 9 16:56:29 2012 -0800

    Ignore motion during touch count changes on semi-mt devices
    
    Semi-mt devices do not track touches. The locations of touches are
    unknown, we only have the bounding box of two of them. When the number of
    fingers changes, the bounding box coordinates may change as well, but
    the cumulative relative motion updates at that instant are invalid.
    
    To work around this, ignore changes in cumulative relative motion if the
    touch count changes.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>

commit 405f1643e26b57ee97063e76e71179ba8e9fbc92
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Mon Feb 6 17:33:11 2012 -0800

    Add soft button areas property
    
    Some clickpad devices have button areas painted on them. Set this
    property to the area of the right and middle buttons to enable proper
    click actions when clicking in the areas.
    
    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>

commit f198522064501726d76bef4e11c02cfc778bb0c5
Author: Chase Douglas <chase.douglas@canonical.com>
Date:   Thu Feb 9 11:18:25 2012 -0800

    Calculate touch data for semi-mt devices, but don't send touch events
    
    Previously, all touch data from semi-mt devices was ignored because the
    X server doesn't support them. However, the touch data must be used for
    proper clickpad handling.
    
    Instead of ignoring semi-mt device touch events, mark the device as
    being semi-mt and allow initialization of the touch state. The touches
    will then be used in calculating the cumulative_d{x,y} values that are
    needed for clickpad support.
    
    When handling the touch data for X event processing, simply skip over
