Bug 387156 (libinput-touchpad-kcm-click-method)

Summary: libinput touchpad KCM lacks support for click method ("areas" or "fingers") for buttonless touchpads
Product: [Applications] systemsettings Reporter: Nate Graham <nate>
Component: kcm_touchpadAssignee: Plasma Bugs List <plasma-bugs>
Status: RESOLVED FIXED    
Severity: normal CC: atulbisht26, bugseforuns, subdiff
Priority: NOR Keywords: usability
Version: 5.17.5   
Target Milestone: ---   
Platform: Ubuntu   
OS: Linux   
Latest Commit: Version Fixed In: 5.16.0
Sentry Crash Report:
Bug Depends on:    
Bug Blocks: 383379    
Attachments: No click method

Description Nate Graham 2017-11-20 15:29:54 UTC
Created attachment 108981 [details]
No click method

Libinput supports two methods of clicking with these annoying modern buttonless touchpads:
- "Areas": virtual left, right, and middle-click buttons are created on the bottom edge of the pad
- "Fingers": left, right, and middle clicks can be made by clicking or tapping anywhere on the pad using one, two, or three fingers (respectively).

For API details see https://wayland.freedesktop.org/libinput/doc/latest/group__config.html#ga3e5dc19a83752430d5e8be7fb2020663

The libinput touchpad KCM does not expose this setting. See attached screenshot.
Comment 1 Roman Gilg 2018-01-17 22:56:56 UTC
Ok, so for reference the difference between click method "Fingers" and "Multi tapping" is:

* Fingers is associated with the _physical_ down-pressing of the whole touchpad (my new laptop has this thing, you can press the whole touchpad like a button and it clicks while doing it; never really used it)
* Tapping/Multi-tapping means just a quick _contact_ of one / multiple fingers with the touchpad and no physical down-pressing of the whole touchpad

In contrast to tapping it seems not to be configurable if a physical down-pressing with two fingers is a right/middle click while with three fingers it is a middle/right click.
Comment 2 Nate Graham 2018-01-17 23:13:18 UTC
Actually click method has two options: fingers and areas. It's basically used to determine where the virtual buttons are for touchpads that lack physical buttons:
- Fingers: under your fingers; right-click by putting town two fingers and pressing
- Areas: a rectangle on the bottom of the pad becomes filled with virtual buttons; a left-click button on the left, a right-click button on the right, and an )optional) middle button in between them.

Relevant documentation: https://wayland.freedesktop.org/libinput/doc/latest/clickpad_softbuttons.html

So yeah, if your touchpad actually has physical buttons (lucky you in this day and age!), then this option shouldn't be visible. But for us poor schlubs stuck with buttonless touchpads, it's pretty important.
Comment 3 Nate Graham 2018-06-13 17:27:12 UTC
Here are my suggestions for a UI that exposes all this functionality in a reasonably comprehensible and user-friendly way.

For a touchpad that has separate physical left and right-click buttons built into the touchpad, use the UI that we already have; don't change anything.

For a touchpad has no separate physical buttons, or that has only separate physical buttons on top (e.g. for a trackpoint on Thinkpad laptops), show a UI like this:



Right-click:  (0) Press bottom-right corner {This is Libinput's "Areas" mode; change the string to say "Press bottom-left corner" when "left handed mode" is being used}
              ( ) Press anywhere with two fingers {this is Libinput's "Clickfinger" mode}


{Middle click setting when using Areas mode}
Middle-click: (0) Press bottom-middle
              ( ) Press bottom left and bottom right corners simultaneously

{Middle click setting when using Clickfinger mode}
Middle-click: [x] Press anywhere with three fingers
{checkbox is disabled; in this mode you can't turn off three-finger middle-click, but we keep it visible for instructional purposes}



So this is what the user would see when using "Areas" mode:

Right-click:  (0) Press bottom-right corner
              ( ) Press anywhere with two fingers

Middle-click: (0) Press bottom-middle
              ( ) Press bottom left and bottom right corners simultaneously


And this is what the user would see when using Clickfinger mode:
Right-click:  ( ) Press bottom-right corner
              (0) Press anywhere with two fingers

Middle-click: [x] Press anywhere with three fingers
Comment 4 Nate Graham 2018-12-10 16:14:34 UTC
I think I confused people. This is what it would look like:

Right-click:  (0) Press bottom-right corner
              ( ) Press anywhere with two fingers

Middle-click: (0) Press bottom-middle
              ( ) Press bottom left and bottom right corners simultaneously


The if the right-click setting is changed to "Press anywhere with two fingers", then the middle-click radio buttons change into a single checkbox:

Middle-click: [x] Press anywhere with three fingers
Comment 5 atulbi 2018-12-15 15:44:49 UTC
Will there be a case,

When user has buttonless touchpad and neither clickfinger nor areas method will be selected ?

or 

one of the setting will always be set as default.
Comment 6 Nate Graham 2018-12-15 16:13:17 UTC
One will always be set as the default: either Libinput's own default setting (currently areas) or a KDE-chosen default.
Comment 7 Nate Graham 2019-03-05 19:40:26 UTC
Git commit 8ca7335288fa621b987ae3fec4428c6601ceef67 by Nate Graham, on behalf of Atul Bisht.
Committed on 05/03/2019 at 19:23.
Pushed by ngraham into branch 'master'.

[libinput-touchpad-kcm-click-method] Add click method Areas and Clickfinger for buttonless touchpads

Summary:
- Added Properties to wayland Backend
- User can switch between areas and clickfinger methods if touchpads has no physical buttons.
- when areas mode is selected, user can enable and enable/disable middle-emulation.
- In clickfinger mode , for informative purposes checked but disabled checkbox will be shown with "Press anywhere with three fingers" text.
FIXED-IN: 5.16.0

Reviewers: ngraham, #plasma, romangg, davidedmundson

Reviewed By: ngraham, #plasma, davidedmundson

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D18912

M  +17   -2    kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.cpp
M  +44   -0    kcms/touchpad/src/backends/kwin_wayland/kwinwaylandtouchpad.h
M  +149  -0    kcms/touchpad/src/kcm/libinput/main.qml

https://commits.kde.org/plasma-desktop/8ca7335288fa621b987ae3fec4428c6601ceef67