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.
-- Chase
_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel