[PATCH xf86-input-synaptics 00/12] Clickpad support

Chase Douglas chase.douglas at canonical.com
Fri Feb 10 17:25:06 PST 2012


On 02/11/2012 02:09 AM, Bryce Harrington wrote:
> On Fri, Feb 10, 2012 at 05:11:10AM +0100, Chase Douglas wrote:
>> On 02/10/2012 03:52 AM, Chase Douglas wrote:
>>> This patch series adds proper clickpad support. Clickpads are trackpads that
>>> have buttons integrated into their touch surface. In order to press the buttons
>>> one has to be in contact with the touchpad. This causes all kinds of problems
>>> today. For example, pressing with one finger and dragging with another is
>>> interpreted as a two-touch scroll (where enabled).
>>>
>>> This patch set attempts to work across all clickpads. The variants I am aware of
>>> are:
>>>
>>> Apple magic trackpad and unibody macbook trackpads
>>> - Whole touch surface is one button
>>>
>>> Synaptics ClickPads
>>> - Whole touch surface is a button
>>> - Left and right button areas are painted on
>>> - Use "Synaptics Right Button Area" property to set the button area
>>> - Taps and clicks in right button area will emit right clicks
>>>
>>> Dell Synaptics ClickPads
>>> - Only seen in older Dell netbooks, will never be produced again (hopefully)
>>> - Bottom right of touchpad is left button
>>
>> ^^ Should be: - Bottom left of touchpad is left button
>>
>>> - Bottom right of touchpad is right button
>>> - No other area physically clicks or is interpreted as a button
>>> - Use "Synaptics Right Button Area" property so taps emit right clicks
> 
> With the Clickpad property turned on with one of these dell netbooks,
> when you touch the button surface with the second finger without pushing
> the button it immediately interrupts and stops the pointer movement.  I
> gather this is by design but it is a behavioral change that some might
> find awkward.

This is due to the previous patch set. The issue boils down to: when is
it acceptable to send touch events? Peter, Daniel, and I had a couple
long discussions about this on irc, and the result was that we can't
send touch events whenever the input module is emitting other events
derived from touches. For example, we can't emit touch events while
performing a two-finger scroll.

This means we also can't emit touch events while moving the cursor. I
added a patch that ensures the cursor is only ever moved when one touch
is on the device so we can emit touch events when two touches are on the
device.

The end goal is to enable multitouch gestures. Any time we don't send
touch events, we are also inhibiting multitouch gestures. Thus, we are
trying to cut down on the minimum number of touches required for touch
events to be sent.

Currently (in git), synaptics will send touch events when:

* More than 3 touches are active, or
* More than 2 touches are active and three touch click-action and
  tap-action are disabled, or
* More than 1 touch are active and two touch click-action and tap-action
  are disabled and two-touch scrolling is disabled

These clickpad patches add 1 to all of the above since one touch is
assumed to be doing nothing but pressing the buttonpad. I'm not
completely satisfied with this, but it's the best we can do right now.

> Other than that, these patches seemed to work well when I tested them,
> and appear to have finally eliminated the random jumps that have always
> plagued this device.

Great! Thanks for the testing!

-- Chase


More information about the xorg-devel mailing list