[PATCH xf86-input-synaptics] Add support for INPUT_PROP_TOPBUTTONPAD

Hans de Goede hdegoede at redhat.com
Tue Apr 22 09:58:11 PDT 2014


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.

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



More information about the xorg-devel mailing list