On Wed, Feb 22, 2012 at 08:22:40PM -0800, Chase Douglas wrote:
> On 02/22/2012 07:58 PM, Peter Hutterer wrote:
> >On Thu, Feb 09, 2012 at 06:53:01PM -0800, Chase Douglas wrote:
> >>Signed-off-by: Chase Douglas<[email protected]>
> >>---
> >>  src/synaptics.c |   11 +++++++++++
> >>  1 files changed, 11 insertions(+), 0 deletions(-)
> >>
> >>diff --git a/src/synaptics.c b/src/synaptics.c
> >>index 662e060..473ce13 100644
> >>--- a/src/synaptics.c
> >>+++ b/src/synaptics.c
> >>@@ -1889,10 +1889,13 @@ HandleTapProcessing(SynapticsPrivate *priv, struct 
> >>SynapticsHwState *hw,
> >>        hw->left = 0;
> >>    break;
> >>      case TS_CLICKPAD_MOVE:
> >>+   if (hw->numFingers>  1)
> >>+       hw->numFingers--;
> >>    SetMovingState(priv, MS_TOUCHPAD_RELATIVE, now);
> >>    if (!hw->left&&  !hw->right&&  !hw->middle) {
> >>        SetMovingState(priv, MS_FALSE, now);
> >>        SetTapState(priv, TS_MOVE, now);
> >>+       priv->count_packet_finger = 0;
> >>    }
> >>    break;
> >>      }
> >>@@ -2777,6 +2780,14 @@ HandleState(InputInfoPtr pInfo, struct 
> >>SynapticsHwState *hw, CARD32 now,
> >>      if (para->touchpad_off == 1)
> >>    return delay;
> >>
> >>+    /* If a physical button is pressed on a clickpad, use cumulative touch
> >>+     * movements for motion */
> >>+    if (para->clickpad&&  (hw->left || hw->right || hw->middle))
> >>+    {
> >>+        hw->x = hw->cumulative_dx;
> >>+        hw->y = hw->cumulative_dy;
> >>+    }
> >>+
> >
> >help me out here: hw->x is absolute, but hw->cumulative_dx is relative. how
> >do we deal with this?
> 
> It's not the most elegant due to how synaptics passes state around,
> but essentially the cumulative values are always the same as the x
> and y values while one touch is active. Once two or more touches are
> active, the cumulative values get incremented and decremented by the
> relative motion of each touch.
> 
> If you tried to follow one of the touches, the first touch would
> need to be followed or the x and y values would need to be warped
> and the synaptics history reset. Then you have to make sure the
> right touch is picked, which may take multiple events to determine
> correctly. This would add latency to a press-and-drag action.
> 
> Instead, using the cumulative motion of all touches means we don't
> have to choose a single touch to follow up front. The only time this
> gets wonky is if you move multiple fingers at the same time while
> the clickpad is pressed. I don't know of any use cases for this,
> though, so I'm not too worried about it.

this should almost certainly be in the commit message and in a comment in
the source too.

Cheers,
  Peter
_______________________________________________
[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