mirror of
https://gitlab.freedesktop.org/libinput/libinput.git
synced 2025-12-20 13:50:15 +01:00
Middle button interaction is most commonly to paste and it is a single-event interaction (button press). We provided middle button in software button mode by emulating it with a two-finger press with L+R down at the same time. This is also what many touchpads are spectacularly bad at, it is very common to detect the physical button down event before the second finger registers, resulting in left or right clicks where a middle button should be triggered. Unless the fingers are resting on the touchpad for at least one scanout, the success rate for middle button emulation is only at 70% or so. This patch adds a 25%-width middle button area between the left and the right software button, everything else stays the same. To avoid immediate breakage, the middle button emulation remains but may be removed in the future. The doc is updated to only refer to the middle button area now. https://bugs.freedesktop.org/show_bug.cgi?id=94755 Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Hans de Goede <hdegoede@redhat.com>
99 lines
4.8 KiB
Text
99 lines
4.8 KiB
Text
/**
|
|
@page clickpad_softbuttons Clickpad software button behavior
|
|
|
|
Clickpad is the name given to touchpads without physical buttons below the
|
|
touchpad. Instead, the whole touchpad acts as a button and left or right
|
|
button clicks are distinguished by the location and/or number of fingers on
|
|
the touchpad. <a href="http://www.synaptics.com/en/clickpad.php">"ClickPad" is
|
|
a trademark by Synaptics Inc.</a> but for simplicity we refer to any
|
|
touchpad with the above feature as Clickpad, regardless of the manufacturer.
|
|
|
|
A clickpad is always marked with the <a
|
|
href="https://www.kernel.org/doc/Documentation/input/event-codes.txt">INPUT_PROP_BUTTONPAD</a> property.
|
|
To perform a right-click on a Clickpad, libinput provides @ref
|
|
software_buttons and @ref clickfinger.
|
|
|
|
In the page below, the term "click" shall refer to a physical button press
|
|
and/or release of the touchpad, the term "button event" refers to the events
|
|
generated by libinput and passed to the caller in response to a click.
|
|
|
|
@section software_buttons Software button areas
|
|
|
|
On most clickpads, this is the default behavior. The bottom of the touchpad
|
|
is split into three distinct areas generate left, middle or right button
|
|
events on click. The height of the button area depends on the hardware but
|
|
is usually around 10mm.
|
|
|
|
Left, right and middle button events can be triggered as follows:
|
|
- if a finger is in the main area or the left button area, a click generates
|
|
left button events.
|
|
- if a finger is in the right area, a click generates right button events.
|
|
- if a finger is in the middle area, a click generates middle button events.
|
|
|
|
The middle button is always centered on the touchpad and smaller in size
|
|
than the left or right button. The actual size is device-dependent though as
|
|
many touchpads do not have visible markings for the middle button the exact
|
|
location of the button is not visibly obvious.
|
|
|
|
@image html software-buttons.svg "Left, right and middle-button click with software button areas"
|
|
|
|
If fingers are down in the main area in addition to fingers in the
|
|
left or right button area, those fingers are are ignored.
|
|
A release event always releases the buttons logically down, regardless of
|
|
the current finger position
|
|
|
|
The movement of a finger can alter the button area behavior:
|
|
- if a finger starts in the main area and moves into the software button
|
|
area, the software buttons do not apply to that finger
|
|
- a finger in the software button area does not move the pointer
|
|
- if a finger moves out out of the button area it will control the pointer
|
|
if it's the first finger in the main area
|
|
- once a finger has moved out of the button area, it cannot move back in and
|
|
trigger a right or middle button event
|
|
|
|
On some touchpads, notably the 2015 Lenovo X1 Carbon 3rd series, the very
|
|
bottom end of the touchpad is outside of the sensor range but it is possible
|
|
to trigger a physical click there. To libinput, the click merely shows up as
|
|
a left button click without any positional finger data and it is
|
|
impossible to determine whether it is a left or a right click. libinput
|
|
ignores such button clicks, this behavior is intentional.
|
|
|
|
@section clickfinger Clickfinger behavior
|
|
|
|
This is the default behavior on Apple touchpads.
|
|
Here, a left, right, middle button event is generated when one, two, or
|
|
three fingers are held down on the touchpad when a physical click is
|
|
generated. The location of the fingers does not matter and there are no
|
|
software-defined button areas.
|
|
|
|
@image html clickfinger.svg "One, two and three-finger click with Clickfinger behavior"
|
|
|
|
On some touchpads, libinput imposes a limit on how the fingers may be placed
|
|
on the touchpad. In the most common use-case this allows for a user to
|
|
trigger a click with the thumb while leaving the pointer-moving finger on
|
|
the touchpad.
|
|
|
|
@image html clickfinger-distance.svg "Illustration of the distance detection algorithm"
|
|
|
|
In the illustration above the red area marks the proximity area around the
|
|
first finger. Since the thumb is outside of that area libinput considers the
|
|
click a single-finger click rather than a two-finger click.
|
|
|
|
Clickfinger configuration can be enabled through the
|
|
libinput_device_config_click_set_method() call. If clickfingers are
|
|
enabled on a touchpad with top software buttons, the top area will keep
|
|
acting as softbuttons for use with the trackpoint. Clickfingers will be used
|
|
everywhere else on the touchpad.
|
|
|
|
@section special_clickpads Special Clickpads
|
|
|
|
The Lenovo *40 series laptops have a clickpad that provides two software button sections, one at
|
|
the top and one at the bottom. See @ref t440_support "Lenovo *40 series touchpad support"
|
|
for details on the top software button.
|
|
|
|
Some Clickpads, notably some Cypress ones, perform right button detection in
|
|
firmware and appear to userspace as if the touchpad had physical buttons.
|
|
While physically clickpads, these are not handled by the software and
|
|
treated like traditional touchpads.
|
|
|
|
*/
|