[RFC] weston: Sony clickpad support
David Herrmann
dh.herrmann at gmail.com
Mon Aug 12 09:15:43 PDT 2013
Hi
On Mon, Aug 5, 2013 at 12:34 PM, Alexander E. Patrakov
<patrakov at gmail.com> wrote:
> This patch series adds support to weston for a special type of touchpads
> found in some laptops. These touchpads contain one physical button that
> covers the whole surface of the touchpad. Unlike the well-known Apple
> touchpad, these touchpads have markings painted on them, that designate
> virtual button areas. So the user interaction is quite different from one
> gets from Apple touchpads.
>
> +---------------------------+
> |\/\/\/\/\/\/\/\/\/\/\/\/\/\|
> |/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> |\/\/\/\/\/\/\/\/\/\/\/\/\/\|
> |/\ Cursor-moving area /\/|
> |\/\/\/\/\/\/\/\/\/\/\/\/\/\|
> |/\/\/\/\/\/\/\/\/\/\/\/\/\/|
> |\/\/\/\/\/\/\/\/\/\/\/\/\/\|
> +---------------------------+ <-- painted line
> | Left | Right |
> | virtual | virtual |
> | button | button |
> +-------------+-------------+
> ^
> |
> painted line
>
> E.g., currently, in order to get a right-click on such "clickpad", one has
> to click anywhere with two fingers. This is, however, inappropriate for
> touchpads I am talking about. See: one needs to drag something, he places a
> finger on the upper part of the touchpad surface (on the part of surface
> designated for moving the cursor), then places another finger into the
> left half of the button area, clicks with the intention to move the first
> finger. However, what he currently gets is a right-click. Also, if one
> wants to make a right click, he places his finger into the right half of
> the button area, clicks, but currently gets a left click. In other words,
> the touchpad is unusable for users that are accustomed to the way the
> interaction with the touchpad is done in Windows.
>
> I have implemented the interaction model that looks more like what one
> gets in Windows. In order to do so, I had to refactor the existing code a
> bit and add support for multitouch protocol to evdev-touchpad.c.
>
> Tested all of this on my Sony VAIO VPC-Z23A4R laptop. Here is what works:
>
> * Moving the cursor by moving the finger in the cursor-moving area of
> the touchpad.
> * Not moving the cursor if one moves the finger in the virtual button
> area.
> * Tap-to-click.
> * Tap-and-drag gesture (unreliable).
> * Left and right virtual buttons.
> * Dragging, as explaining above.
> * Insensitivity to bad clicks (those outside the designated button area).
> * Two-finger scrolling.
>
> ...i.e. the touchpad is now quite usable. Zoom gestures are not implemented,
> though.
>
> I have also added autodetection of the interaction model based on the
> laptops with clickpads that GUADEC participants brought with themselves.
> Result: the current interaction model is valid only for Apple and Chromebook
> Pixel laptops, for everyone else the alternative model in this patch is
> needed because there are buttons painted on the clickpad.
The implementation looks quite nice. I will not comment on the code
individually, though. I'd really like to see a libtouchpad which
implements all that logic. Once we start adding device drivers to
weston, we will end up with a mess where we have to port it to each
compositor we write. If gnome-shell becomes a compositor, it needs to
implement this again.
libxkbcommon already abstracted the keyboard handling. Why not do the
same for touchpads? The "wl_touch" interface to weston is already
standardized, so all this library needs to provide is a state-machine
that converts evdev events into something similar to wl_touch.
It's currently on my TODO list, so feel free to ignore it. But imho we
should try to keep user-space input drivers separate to allow reuse
and uniform configurations.
Cheers
David
More information about the wayland-devel
mailing list