diff options
-rw-r--r-- | conf/50-synaptics.conf | 25 | ||||
-rw-r--r-- | man/synaptics.man | 29 | ||||
-rw-r--r-- | src/eventcomm.c | 8 | ||||
-rw-r--r-- | src/properties.c | 3 | ||||
-rw-r--r-- | src/synaptics.c | 7 | ||||
-rw-r--r-- | src/synapticsstr.h | 1 |
6 files changed, 45 insertions, 28 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/man/synaptics.man b/man/synaptics.man index 2b8d1d9..76756be 100644 --- a/man/synaptics.man +++ b/man/synaptics.man @@ -495,17 +495,28 @@ buttons to share an edge value. Property: "Synaptics Soft Button Areas" . .TP -.BI "Option \*qSecondarySoftButtonAreas\*q \*q" "RBL RBR RBT RBB MBL MBR MBT MBB" \*q +.BI "Option \*qHasSecondarySoftButtons\*q \*q" boolean \*q This option is only available on ClickPad devices. -Enable secondary soft button click area support on ClickPad devices (usually on +Enable the secondary software button area support. The exact area must be +set in option \*qSecondarySoftButtonAreas\*q. See +.B ClickPad support +for more details. +. +.TP +.BI "Option \*qSecondarySoftButtonAreas\*q \*q" "RBL RBR RBT RBB MBL MBR MBT MBB" \*q +This option is only available on ClickPad devices and only if +.B Option \*qHasSecondarySoftButtons\*q +is enabled. +Define the secondary soft button click areas on ClickPad devices (usually on top of the device). For the allowed values for this option, see .B Option \*qSoftButtonAreas\*q. Primary and secondary soft button areas must not overlap each other. If they do, the behavior of the driver is undefined. Property: "Synaptics Secondary Soft Button Areas". This property is only -initialized if the option is set in the -__xconfigfile__(__filemansuffix__). +initialized if +.B Option \*qHasSecondarySoftButtons\*q +is enabled and this option is set in the __xconfigfile__(__filemansuffix__). . .SH CONFIGURATION DETAILS @@ -729,9 +740,15 @@ area, a right or middle click is performed. .LP Some laptops, most notably the Lenovo T440, T540 and x240 series, provide a pointing stick without physical buttons. On those laptops, the top of the -touchpad acts as software-emulated button area. This area can be configured +touchpad acts as software-emulated button area. This area can be enabled +with +.B Option \*qHasSecondarySoftButtons\*q +and configured with -.B Option SecondarySoftButtonAreas. +.B Option \*qSecondarySoftButtonAreas\*q. +On some platforms, this option +will be set automatically if the kernel detects a matching device. On Linux, +the device must have the INPUT_PROP_TOPBUTTONPAD property set. .SH "DEVICE PROPERTIES" Synaptics 1.0 and higher support input device properties if the driver is diff --git a/src/eventcomm.c b/src/eventcomm.c index 5871374..0a6ea48 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 top buttonpad property\n"); + para->has_secondary_buttons = TRUE; + } #endif diff --git a/src/properties.c b/src/properties.c index 4c75797..718d054 100644 --- a/src/properties.c +++ b/src/properties.c @@ -176,6 +176,9 @@ InitSoftButtonProperty(InputInfoPtr pInfo) prop_softbutton_areas = InitAtom(pInfo->dev, SYNAPTICS_PROP_SOFTBUTTON_AREAS, 32, 8, values); + if (!para->has_secondary_buttons) + return; + values[0] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][LEFT]; values[1] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][RIGHT]; values[2] = para->softbutton_areas[TOP_RIGHT_BUTTON_AREA][TOP]; diff --git a/src/synaptics.c b/src/synaptics.c index 118d1c6..b25c902 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -674,6 +674,10 @@ 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 */ + if (pars->clickpad) + pars->has_secondary_buttons = xf86SetBoolOption(opts, + "HasSecondarySoftButtons", + pars->has_secondary_buttons); 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 +781,8 @@ set_default_parameters(InputInfoPtr pInfo) } set_primary_softbutton_areas_option(pInfo); - set_secondary_softbutton_areas_option(pInfo); + if (pars->has_secondary_buttons) + set_secondary_softbutton_areas_option(pInfo); } static double diff --git a/src/synapticsstr.h b/src/synapticsstr.h index b8a3492..4bd32ac 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 has_secondary_buttons; /* 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. */ |