[PATCH synaptics v5 09/18] Add clickpad device property

Peter Hutterer peter.hutterer at who-t.net
Mon Mar 12 23:37:36 PDT 2012


From: Chase Douglas <chase.douglas at canonical.com>

Add it as a writable device property. We may not know how to probe some
clickpads so allow the user to override it.

Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
Changes to v4:
- squashed the patch to add the property/option with the code to
  automatically set it if the kernel says so
- don't disable clickpad if we only have a left button, it makes it unusable
  on most clickpads

 include/synaptics-properties.h |    3 +++
 man/synaptics.man              |   10 ++++++++++
 src/eventcomm.c                |    7 +++++++
 src/properties.c               |    7 +++++++
 src/synaptics.c                |    1 +
 src/synapticsstr.h             |    1 +
 tools/synclient.c              |    1 +
 7 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/include/synaptics-properties.h b/include/synaptics-properties.h
index c550cef..140f14b 100644
--- a/include/synaptics-properties.h
+++ b/include/synaptics-properties.h
@@ -49,6 +49,9 @@
 #define SYNAPTICS_PROP_TAP_DURATIONS "Synaptics Tap Durations"
 
 /* 8 bit (BOOL) */
+#define SYNAPTICS_PROP_CLICKPAD "Synaptics ClickPad"
+
+/* 8 bit (BOOL) */
 #define SYNAPTICS_PROP_TAP_FAST "Synaptics Tap FastTap"
 
 /* 32 bit */
diff --git a/man/synaptics.man b/man/synaptics.man
index b6b1dce..8edc2f0 100644
--- a/man/synaptics.man
+++ b/man/synaptics.man
@@ -143,6 +143,12 @@ Maximum time (in milliseconds) for detecting a double tap. Property:
 The duration of the mouse click generated by tapping. Property: "Synaptics Tap
 Durations"
 .TP 7
+.BI "Option \*qClickPad\*q \*q" boolean \*q
+Whether the device is a click pad. A click pad device has button(s) integrated
+into the touchpad surface. The user must press downward on the touchpad in order
+to generated a button press. This property may be set automatically if a click
+pad device is detected at initialization time. Property: "Synaptics ClickPad"
+.TP 7
 .BI "Option \*qFastTaps\*q \*q" boolean \*q
 Makes the driver react faster to a single tap, but also makes double
 clicks caused by double tapping slower. Property: "Synaptics Tap FastTap"
@@ -785,6 +791,10 @@ Properties supported:
 duration of a single click.
 
 .TP 7
+.BI "Synaptics ClickPad"
+8 bit (Bool).
+
+.TP 7
 .BI "Synaptics Tap FastTap"
 8 bit (BOOL).
 
diff --git a/src/eventcomm.c b/src/eventcomm.c
index b49b73a..d031eb4 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -716,6 +716,7 @@ static void
 event_query_touch(InputInfoPtr pInfo)
 {
     SynapticsPrivate *priv = (SynapticsPrivate *)pInfo->private;
+    SynapticsParameters *para = &priv->synpara;
     struct eventcomm_proto_data *proto_data = priv->proto_data;
     struct mtdev *mtdev;
     int i;
@@ -733,6 +734,12 @@ event_query_touch(InputInfoPtr pInfo)
         return;
     }
 
+    if (rc >= 0 && BitIsOn(&prop, INPUT_PROP_BUTTONPAD))
+    {
+        xf86IDrvMsg(pInfo, X_INFO, "found clickpad property\n");
+        para->clickpad = TRUE;
+    }
+
     mtdev = mtdev_new_open(pInfo->fd);
     if (!mtdev)
     {
diff --git a/src/properties.c b/src/properties.c
index 0a52801..38f21b2 100644
--- a/src/properties.c
+++ b/src/properties.c
@@ -58,6 +58,7 @@ Atom prop_finger                = 0;
 Atom prop_tap_time              = 0;
 Atom prop_tap_move              = 0;
 Atom prop_tap_durations         = 0;
+Atom prop_clickpad              = 0;
 Atom prop_tap_fast              = 0;
 Atom prop_middle_timeout        = 0;
 Atom prop_twofinger_pressure    = 0;
@@ -189,6 +190,8 @@ InitDeviceProperties(InputInfoPtr pInfo)
     values[2] = para->click_time;
 
     prop_tap_durations = InitAtom(pInfo->dev, SYNAPTICS_PROP_TAP_DURATIONS, 32, 3, values);
+    prop_clickpad = InitAtom(pInfo->dev, SYNAPTICS_PROP_CLICKPAD, 8, 1,
+                             &para->clickpad);
     prop_tap_fast = InitAtom(pInfo->dev, SYNAPTICS_PROP_TAP_FAST, 8, 1, &para->fast_taps);
     prop_middle_timeout = InitAtom(pInfo->dev, SYNAPTICS_PROP_MIDDLE_TIMEOUT,
                                    32, 1, &para->emulate_mid_button_time);
@@ -392,7 +395,11 @@ SetProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr prop,
         para->single_tap_timeout = timeouts[0];
         para->tap_time_2         = timeouts[1];
         para->click_time         = timeouts[2];
+    } else if (property == prop_clickpad) {
+        if (prop->size != 1 || prop->format != 8 || prop->type != XA_INTEGER)
+            return BadMatch;
 
+        para->clickpad = *(BOOL*)prop->data;
     } 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 6143005..77afbcd 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -552,6 +552,7 @@ static void set_default_parameters(InputInfoPtr pInfo)
     pars->tap_move = xf86SetIntOption(opts, "MaxTapMove", tapMove);
     pars->tap_time_2 = xf86SetIntOption(opts, "MaxDoubleTapTime", 180);
     pars->click_time = xf86SetIntOption(opts, "ClickTime", 100);
+    pars->clickpad = xf86SetIntOption(opts, "ClickPad", pars->clickpad); /* Probed */
     pars->fast_taps = xf86SetBoolOption(opts, "FastTaps", FALSE);
     pars->emulate_mid_button_time = xf86SetIntOption(opts, "EmulateMidButtonTime", 75);
     pars->emulate_twofinger_z = xf86SetIntOption(opts, "EmulateTwoFingerMinZ", emulateTwoFingerMinZ);
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index b346293..a6e94e3 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -126,6 +126,7 @@ typedef struct _SynapticsParameters
     int single_tap_timeout;		    /* timeout to recognize a single tap */
     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 fast_taps;			    /* Faster reaction to single taps */
     int emulate_mid_button_time;	    /* Max time between left and right button presses to
 					       emulate a middle button press. */
diff --git a/tools/synclient.c b/tools/synclient.c
index 14ec605..6e77ee8 100644
--- a/tools/synclient.c
+++ b/tools/synclient.c
@@ -144,6 +144,7 @@ static struct Parameter params[] = {
     {"AreaBottomEdge",        PT_INT,    0, 10000, SYNAPTICS_PROP_AREA,	32,	3},
     {"HorizHysteresis",       PT_INT,    0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,	0},
     {"VertHysteresis",        PT_INT,    0, 10000, SYNAPTICS_PROP_NOISE_CANCELLATION, 32,	1},
+    {"ClickPad",              PT_BOOL,   0, 1,     SYNAPTICS_PROP_CLICKPAD,	8,	0},
     { NULL, 0, 0, 0, 0 }
 };
 
-- 
1.7.7.6



More information about the xorg-devel mailing list