[PATCH xf86-input-synaptics v4 03/10] Disable click action functionality for clickpads by default

Chase Douglas chase.douglas at canonical.com
Fri Mar 2 12:42:29 PST 2012


Clickpad press-and-drag with two fingers will break click actions.
Disable them for these devices by default until a good solution is found
for letting both functionalities co-exist.

Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
---
 src/properties.c |   14 ++++++++++++++
 src/synaptics.c  |   11 +++++++----
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/properties.c b/src/properties.c
index 38f21b2..11b4156 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -400,6 +400,20 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
             return BadMatch;
 
         para->clickpad = *(BOOL*)prop->data;
+
+        /* ClickPad support conflicts with click action support. Reset click
+         * actions. The user can override afterwards if they really want. */
+        if (para->clickpad)
+        {
+            CARD8 values[3] = {};
+
+            para->click_action[F1_CLICK1] = 0;
+            para->click_action[F2_CLICK1] = 0;
+            para->click_action[F3_CLICK1] = 0;
+
+            XIChangeDeviceProperty(dev, prop_clickaction, XA_INTEGER, 8,
+                                   PropModeReplace, 3, values, TRUE);
+        }
     } else if (property == prop_tap_fast)
     {
         if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
diff --git a/src/synaptics.c b/src/synaptics.c
index 64e87da..f1b76ee 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -428,7 +428,7 @@ static void set_default_parameters(InputInfoPtr pInfo)
     int pressureMotionMinZ, pressureMotionMaxZ;		/* pressure */
     int palmMinWidth, palmMinZ;				/* pressure */
     int tapButton1, tapButton2, tapButton3;
-    int clickFinger1, clickFinger2, clickFinger3;
+    int clickFinger1 = 0, clickFinger2 = 0, clickFinger3 = 0;
     Bool vertEdgeScroll, horizEdgeScroll;
     Bool vertTwoFingerScroll, horizTwoFingerScroll;
     int horizResolution = 1;
@@ -500,9 +500,12 @@ static void set_default_parameters(InputInfoPtr pInfo)
 
     /* Enable multifinger-click if only have one physical button,
        otherwise clickFinger is always button 1. */
-    clickFinger1 = 1;
-    clickFinger2 = (priv->has_right || priv->has_middle) ? 1 : 3;
-    clickFinger3 = (priv->has_right || priv->has_middle) ? 1 : 2;
+    if (!pars->clickpad)
+    {
+        clickFinger1 = 1;
+        clickFinger2 = (priv->has_right || priv->has_middle) ? 1 : 3;
+        clickFinger3 = (priv->has_right || priv->has_middle) ? 1 : 2;
+    }
 
     /* Enable vert edge scroll if we can't detect doubletap */
     vertEdgeScroll = priv->has_double ? FALSE : TRUE;
-- 
1.7.9



More information about the xorg-devel mailing list