[PATCH xf86-input-synaptics] Add support for INPUT_PROP_TOPBUTTONPAD
Peter Hutterer
peter.hutterer at who-t.net
Tue Apr 22 22:47:01 PDT 2014
On Tue, Apr 22, 2014 at 06:58:11PM +0200, Hans de Goede wrote:
> Add a TopClickPad boolean config option which defaults to true for devices
> with the INPUT_PROP_TOPBUTTONPAD and false for all other devices.
>
> Only parse the SecondarySoftButtonAreas when this option is true, effectively
> disabling the top buttons when it is false.
>
> This means that it is now safe to always set a SecondarySoftButtonAreas
> default in 50-synaptics.conf, and that he section which was intended for
> use with future pnp-id matching can be dropped, as that is now all handled
> in the kernel.
>
> While at also remove the comment about disabling the bottom edge area, as that
> is now done automatically.
the only issue I have with this is that I'm not too fond of the term
"TopClickPad". I'm at loss atm for a better term though, maybe something
with TrackstickButtons?
also, the man page hunk must have gotten lost ;)
Cheers,
Peter
>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> conf/50-synaptics.conf | 25 ++++---------------------
> src/eventcomm.c | 8 ++++++++
> src/synaptics.c | 4 +++-
> src/synapticsstr.h | 1 +
> 4 files changed, 16 insertions(+), 22 deletions(-)
>
> diff --git a/conf/50-synaptics.conf b/conf/50-synaptics.conf
> index 161c1dd..a3145b8 100644
> --- a/conf/50-synaptics.conf
> +++ b/conf/50-synaptics.conf
> @@ -25,16 +25,15 @@ Section "InputClass"
> Option "Ignore" "on"
> EndSection
>
> -# This option enables the bottom right corner to be a right button on
> -# non-synaptics clickpads.
> +# This option enables the bottom right corner to be a right button on clickpads
> +# and the right and middle top areas to be right / middle buttons on clickpads
> +# with a top button area.
> # This option is only interpreted by clickpads.
> Section "InputClass"
> Identifier "Default clickpad buttons"
> MatchDriver "synaptics"
> Option "SoftButtonAreas" "50% 0 82% 0 0 0 0 0"
> -# To disable the bottom edge area so the buttons only work as buttons,
> -# not for movement, set the AreaBottomEdge
> -# Option "AreaBottomEdge" "82%"
> + Option "SecondarySoftButtonAreas" "58% 0 0 8% 42% 58% 0 8%"
> EndSection
>
> # This option disables software buttons on Apple touchpads.
> @@ -45,19 +44,3 @@ Section "InputClass"
> MatchDriver "synaptics"
> Option "SoftButtonAreas" "0 0 0 0 0 0 0 0"
> EndSection
> -
> -# The Lenovo *40 series has no physical button for the TrackPoint and needs
> -# the top softbutton area enabled by default.
> -# Affected devices and their PNPIDs
> -# LEN0033: Helix
> -# LEN0034: T431, T540, X1 Carbon
> -# LEN0035: X240
> -# LEN0036: T440
> -# LEN0042: Yoga
> -# LEN2004: L440, L540
> -Section "InputClass"
> - Identifier "Lenovo TrackPoint top software buttons"
> - MatchDriver "synaptics"
> - MatchPnPID "LEN0033*|LEN0034*|LEN0035*|LEN0036*|LEN0042*|LEN2004*"
> - Option "SecondarySoftButtonAreas" "58% 0 0 8% 42% 58% 0 8%"
> -EndSection
> diff --git a/src/eventcomm.c b/src/eventcomm.c
> index 5871374..764e04b 100644
> --- a/src/eventcomm.c
> +++ b/src/eventcomm.c
> @@ -50,6 +50,9 @@
> #ifndef INPUT_PROP_SEMI_MT
> #define INPUT_PROP_SEMI_MT 0x03
> #endif
> +#ifndef INPUT_PROP_TOPBUTTONPAD
> +#define INPUT_PROP_TOPBUTTONPAD 0x04
> +#endif
> #ifndef ABS_MT_TOOL_Y
> #define ABS_MT_TOOL_Y 0x3d
> #endif
> @@ -802,6 +805,11 @@ event_query_touch(InputInfoPtr pInfo)
> xf86IDrvMsg(pInfo, X_INFO, "found clickpad property\n");
> para->clickpad = TRUE;
> }
> +
> + if (libevdev_has_property(dev, INPUT_PROP_TOPBUTTONPAD)) {
> + xf86IDrvMsg(pInfo, X_INFO, "found topclickpad property\n");
> + para->topclickpad = TRUE;
> + }
> #endif
>
>
> diff --git a/src/synaptics.c b/src/synaptics.c
> index 118d1c6..f4b77be 100644
> --- a/src/synaptics.c
> +++ b/src/synaptics.c
> @@ -674,6 +674,7 @@ set_default_parameters(InputInfoPtr pInfo)
> pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 180);
> pars->click_time = xf86SetIntOption(opts, "ClickTime", 100);
> pars->clickpad = xf86SetBoolOption(opts, "ClickPad", pars->clickpad); /* Probed */
> + pars->topclickpad = xf86SetBoolOption(opts, "TopClickPad", pars->topclickpad);
> pars->clickpad_ignore_motion_time = 100; /* ms */
> /* middle mouse button emulation on a clickpad? nah, you're joking */
> middle_button_timeout = pars->clickpad ? 0 : 75;
> @@ -777,7 +778,8 @@ set_default_parameters(InputInfoPtr pInfo)
> }
>
> set_primary_softbutton_areas_option(pInfo);
> - set_secondary_softbutton_areas_option(pInfo);
> + if (pars->topclickpad)
> + set_secondary_softbutton_areas_option(pInfo);
> }
>
> static double
> diff --git a/src/synapticsstr.h b/src/synapticsstr.h
> index b8a3492..98a482d 100644
> --- a/src/synapticsstr.h
> +++ b/src/synapticsstr.h
> @@ -176,6 +176,7 @@ typedef struct _SynapticsParameters {
> int tap_time_2; /* max. tapping time for double taps */
> int click_time; /* The duration of a single click */
> Bool clickpad; /* Device is a has integrated buttons */
> + Bool topclickpad; /* Device has a top soft-button area */
> int clickpad_ignore_motion_time; /* Ignore motion for X ms after a click */
> int emulate_mid_button_time; /* Max time between left and right button presses to
> emulate a middle button press. */
> --
> 1.9.0
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
More information about the xorg-devel
mailing list