configure.ac | 2 +- src/eventcomm.c | 5 ++--- src/properties.c | 6 ++++++ src/synaptics.c | 24 +++++++++++++++++++++--- src/synproto.c | 4 ++-- 5 files changed, 32 insertions(+), 9 deletions(-)
New commits: commit d5ff9d8b0b186cf39695df84a10984eac559b746 Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Tue Jun 12 13:46:34 2012 +1000 synaptics 1.6.2 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index 3e7ec2a..894d4f5 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-input-synaptics], - [1.6.1.901], + [1.6.2], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-input-synaptics]) AC_CONFIG_SRCDIR([Makefile.am]) commit c1aae820601a911432c64938f03eab62bafaab2f Author: Peter Hutterer <peter.hutte...@who-t.net> Date: Fri May 18 09:38:50 2012 +1000 synaptics 1.6.1.901 Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> diff --git a/configure.ac b/configure.ac index 565daf2..3e7ec2a 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ # Initialize Autoconf AC_PREREQ([2.60]) AC_INIT([xf86-input-synaptics], - [1.6.1], + [1.6.1.901], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-input-synaptics]) AC_CONFIG_SRCDIR([Makefile.am]) commit 7ccca8e7d8fbf2ccb5a2dbbfbf06ff4dbd6b7149 Author: Peter Hutterer <peter.hutte...@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.hutte...@who-t.net> Reviewed-by: Chase Douglas <chase.doug...@canonical.com> (cherry picked from commit 6d47d334d8a876e7e094306c313246b87016b78a) diff --git a/src/properties.c b/src/properties.c index 44ac306..3b3f1c5 100644 --- a/src/properties.c +++ b/src/properties.c @@ -519,6 +519,9 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, return BadMatch; dist = (INT32 *) prop->data; + if (dist[0] == 0 || dist[1] == 0) + return BadValue; + if (para->scroll_dist_vert != dist[0]) { para->scroll_dist_vert = dist[0]; #ifdef HAVE_SMOOTH_SCROLL @@ -715,6 +718,9 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop, return BadMatch; circdist = *(float *) prop->data; + if (circdist == 0) + return BadValue; + para->scroll_dist_circ = circdist; } else if (property == prop_circscroll_trigger) { commit f8d970e191e6df05a8f2c26afdeea3e27b941a62 Author: Peter Hutterer <peter.hutte...@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.hutte...@who-t.net> Reviewed-by: Chase Douglas <chase.doug...@canonical.com> (cherry picked from commit cd569377cda9b5a4ee00c0137db14f625c76c40f) diff --git a/src/synaptics.c b/src/synaptics.c index 78660f4..cd9f936 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -3278,6 +3278,19 @@ HandleState(InputInfoPtr pInfo, struct SynapticsHwState *hw, CARD32 now, return delay; } + /* We need both and x/y, the driver can't handle just one of the two + * yet. But since it's possible to hit a phys button on non-clickpads + * without ever getting motion data first, we must continue with 0/0 for + * that case. */ + if (hw->x == INT_MIN || hw->y == INT_MAX) { + if (para->clickpad) + return delay; + else if (hw->left || hw->right || hw->middle) { + hw->x = (hw->x == INT_MIN) ? 0 : hw->x; + hw->y = (hw->y == INT_MIN) ? 0 : hw->y; + } + } + /* If a physical button is pressed on a clickpad, use cumulative relative * touch movements for motion */ if (para->clickpad && (hw->left || hw->right || hw->middle)) { diff --git a/src/synproto.c b/src/synproto.c index d6e8c65..0c8a066 100644 --- a/src/synproto.c +++ b/src/synproto.c @@ -134,8 +134,8 @@ void SynapticsResetHwState(struct SynapticsHwState *hw) { hw->millis = 0; - hw->x = 0; - hw->y = 0; + hw->x = INT_MIN; + hw->y = INT_MIN; hw->z = 0; hw->cumulative_dx = 0; hw->cumulative_dy = 0; commit 739175d198372a3226ce061b118d8fe5bbc8f6bf Author: Chase Douglas <chase.doug...@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.doug...@canonical.com> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 0054b144f3daf00e46a35b2f165befb209df94fc) diff --git a/src/synaptics.c b/src/synaptics.c index 074bcb8..78660f4 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -1153,6 +1153,9 @@ SynapticsReset(SynapticsPrivate * priv) priv->lastButtons = 0; priv->prev_z = 0; priv->prevFingers = 0; +#ifdef HAVE_MULTITOUCH + memset(priv->open_slots, 0, priv->num_slots * sizeof(int)); +#endif } static Bool commit 67a02d676c96d5b3d4729290cd96af0201eb76bb Author: Chun Yang <chuck.y...@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.y...@gmail.com> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 53557a5cab1e253dc8f4393207954ae0fe76068f) diff --git a/src/synaptics.c b/src/synaptics.c index 1d32093..074bcb8 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -2740,7 +2740,7 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw, double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0; double ddy = para->coasting_friction * dtime; - priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * para->scroll_dist_vert; + priv->scroll.delta_y += priv->scroll.coast_speed_y * dtime * abs(para->scroll_dist_vert); delay = MIN(delay, POLL_MS); if (abs(priv->scroll.coast_speed_y) < ddy) { priv->scroll.coast_speed_y = 0; @@ -2755,7 +2755,7 @@ HandleScrolling(SynapticsPrivate * priv, struct SynapticsHwState *hw, if (priv->scroll.coast_speed_x) { double dtime = (hw->millis - priv->scroll.last_millis) / 1000.0; double ddx = para->coasting_friction * dtime; - priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * para->scroll_dist_vert; + priv->scroll.delta_x += priv->scroll.coast_speed_x * dtime * abs(para->scroll_dist_horiz); delay = MIN(delay, POLL_MS); if (abs(priv->scroll.coast_speed_x) < ddx) { priv->scroll.coast_speed_x = 0; commit 23e87b57bb874326c88a7ad7292bec51959fb876 Author: Chase Douglas <chase.doug...@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.doug...@canonical.com> Signed-off-by: Peter Hutterer <peter.hutte...@who-t.net> (cherry picked from commit 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e) diff --git a/src/eventcomm.c b/src/eventcomm.c index 89a8a3a..280ef9b 100644 --- a/src/eventcomm.c +++ b/src/eventcomm.c @@ -564,8 +564,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw, if (slot_index < 0) return; - if (hw->slot_state[slot_index] == SLOTSTATE_EMPTY || - hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY) + if (hw->slot_state[slot_index] == SLOTSTATE_OPEN_EMPTY) hw->slot_state[slot_index] = SLOTSTATE_UPDATE; if (ev->code == ABS_MT_TRACKING_ID) { if (ev->value >= 0) { @@ -580,7 +579,7 @@ EventProcessTouchEvent(InputInfoPtr pInfo, struct SynapticsHwState *hw, "Attempted to copy values from out-of-range " "slot, touch events may be incorrect.\n"); } - else { + else if (hw->slot_state[slot_index] != SLOTSTATE_EMPTY) { hw->slot_state[slot_index] = SLOTSTATE_CLOSE; proto_data->num_touches--; } commit 23065a974e5dcdf0d6a436a0547bb7887d306a6f Author: Peter Hutterer <peter.hutte...@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.hutte...@who-t.net> Reviewed-by: Chase Douglas <chase.doug...@canonical.com> (cherry picked from commit 77d766b1d535dff9a27c7db343ede85d9f44850b) diff --git a/src/synaptics.c b/src/synaptics.c index 30d79c5..1d32093 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -3128,7 +3128,9 @@ UpdateTouchState(InputInfoPtr pInfo, struct SynapticsHwState *hw) priv->open_slots[j] = priv->open_slots[j + 1]; } - priv->num_active_touches--; + BUG_WARN(priv->num_active_touches == 0); + if (priv->num_active_touches > 0) + priv->num_active_touches--; } } -- To UNSUBSCRIBE, email to debian-x-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/e1seuiq-0002se...@vasks.debian.org