From fa54c5b8fcf75531b2d6c6bb6879b3414e5c7792 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Tue, 22 Apr 2014 18:58:11 +0200 Subject: Add support for INPUT_PROP_TOPBUTTONPAD Add a HasSecondaryButtons 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. Likewise, only initialize the SecondarySoftButtonAreas property if we enable support for it. 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 Signed-off-by: Peter Hutterer Reviewed-by: Hans de Goede (cherry picked from commit 7bf27568417691e772e715f8fc6c30ea7ec892d6) Conflicts: src/eventcomm.c --- src/eventcomm.c | 8 ++++++++ src/properties.c | 3 +++ src/synaptics.c | 7 ++++++- src/synapticsstr.h | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/eventcomm.c b/src/eventcomm.c index 152f973..20dbeea 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 #define SYSCALL(call) while (((call) == -1) && (errno == EINTR)) @@ -805,6 +808,11 @@ event_query_touch(InputInfoPtr pInfo) xf86IDrvMsg(pInfo, X_INFO, "found clickpad property\n"); para->clickpad = TRUE; } + + if (rc>= 0 && BitIsOn(&prop, INPUT_PROP_TOPBUTTONPAD)) { + xf86IDrvMsg(pInfo, X_INFO, "found top buttonpad property\n"); + para->has_secondary_buttons = TRUE; + } #endif mtdev = mtdev_new_open(pInfo->fd); 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 21bfb6b..a8784f9 100644 --- a/src/synaptics.c +++ b/src/synaptics.c @@ -659,6 +659,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; @@ -753,7 +757,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. */ -- cgit v1.2.3