[PATCH xf86-input-synaptics v4 10/10] Ignore motion during touch count changes on semi-mt devices

Peter Hutterer peter.hutterer at who-t.net
Sun Mar 4 22:11:28 PST 2012


On Fri, Mar 02, 2012 at 12:42:36PM -0800, Chase Douglas wrote:
> 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 at canonical.com>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter

> ---
>  src/synaptics.c |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/src/synaptics.c b/src/synaptics.c
> index e80dff8..ff3c32e 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -1589,6 +1589,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);
>  	newDelay = TRUE;
> -- 
> 1.7.9
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list