summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChase Douglas <chase.douglas@canonical.com>2012-02-09 16:56:29 -0800
committerPeter Hutterer <peter.hutterer@who-t.net>2012-03-09 15:57:40 +1000
commit9da7a910fae11a824a905e8ea1d0789a9400c761 (patch)
treeba820c128ef8e9f28182c678bba762131b9ba391
parent1bb10165e30922abe3c500c96b81fd58465b23d9 (diff)
Ignore motion during touch count changes on semi-mt devicesclickpad-v3
Semi-mt devices do not track touches. The locations of touches are unknown, we only have the bounding box of two of them. We 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>
-rw-r--r--src/synaptics.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/synaptics.c b/src/synaptics.c
index bfc35bd..f36553c 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1607,6 +1607,14 @@ ReadInput(InputInfoPtr pInfo)
SynapticsResetTouchHwState(hw);
while (SynapticsGetHwState(pInfo, priv, hw)) {
+ /* Semi-mt device touch slots do not track touches. When there is a
+ * change in the number of touches, we must disregard the temporary
+ * motion changes. */
+ if (priv->has_semi_mt && hw->numFingers != priv->hwState->numFingers) {
+ hw->cumulative_dx = priv->hwState->cumulative_dx;
+ hw->cumulative_dy = priv->hwState->cumulative_dy;
+ }
+
SynapticsCopyHwState(priv->hwState, hw);
delay = HandleState(pInfo, hw, hw->millis, FALSE);
SynapticsCopyHwState(priv->old_hw_state, priv->hwState);