On Wed, Aug 18, 2010 at 10:09:45PM -0500, [email protected] wrote:
> From: Chris Bagwell <[email protected]>
> 
> Most modern track 1st finger during multi-touch.  If
             ^ touchpads?

> first finger is lifted then a jump will occur as X/Y
> transition to next finger location.  Resetting X/Y history
> as each finger is lifted will hide this transition.
> 
> Synaptics hw specs claim older hardware report X/Y
> values that are average point between multi-fingers
> which can cause unwanted jump.  Reset X/Y history
> during transition to new fingers to hide this as
> well.
> 
> Signed-off-by: Chris Bagwell <[email protected]>
> ---

I like it, simple and it works well both on a multi-finger and a
single-finger touchpad (with your recent two-finger emulation patches)

merged, thank you.


Cheers,
  Peter

>  src/synaptics.c    |    3 ++-
>  src/synapticsstr.h |    1 +
>  2 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/src/synaptics.c b/src/synaptics.c
> index aa14f76..99b16cc 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -1724,7 +1724,7 @@ ComputeDeltas(SynapticsPrivate *priv, const struct 
> SynapticsHwState *hw,
>      if (inside_area && moving_state && !priv->palm &&
>       !priv->vert_scroll_edge_on && !priv->horiz_scroll_edge_on &&
>       !priv->vert_scroll_twofinger_on && !priv->horiz_scroll_twofinger_on &&
> -     !priv->circ_scroll_on) {
> +     !priv->circ_scroll_on && priv->prevFingers == hw->numFingers) {
>       /* FIXME: Wtf?? what's with 13? */
>       delay = MIN(delay, 13);
>       if (priv->count_packet_finger > 3) { /* min. 3 packets */
> @@ -1794,6 +1794,7 @@ ComputeDeltas(SynapticsPrivate *priv, const struct 
> SynapticsHwState *hw,
>      } else {                             /* reset packet counter */
>       priv->count_packet_finger = 0;
>      }
> +    priv->prevFingers = hw->numFingers;
>  
>      *dxP = dx;
>      *dyP = dy;
> diff --git a/src/synapticsstr.h b/src/synapticsstr.h
> index b4a72aa..caa0476 100644
> --- a/src/synapticsstr.h
> +++ b/src/synapticsstr.h
> @@ -218,6 +218,7 @@ typedef struct _SynapticsPrivateRec
>      int palm;                                /* Set to true when palm 
> detected, reset to false when
>                                          palm/finger contact disappears */
>      int prev_z;                              /* previous z value, for palm 
> detection */
> +    int prevFingers;                 /* previous numFingers, for transition 
> detection */
>      int avg_width;                   /* weighted average of previous 
> fingerWidth values */
>      double horiz_coeff;                 /* normalization factor for x 
> coordintes */
>      double vert_coeff;                  /* normalization factor for y 
> coordintes */
> -- 
> 1.7.2
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to