[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