[PATCH synaptics v5 15/18] Calculate touch data for semi-mt devices, but don't send touch events

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


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

Previously, all touch data from semi-mt devices was ignored because the
X server doesn't support them. However, the touch data must be used for
proper clickpad handling.

Instead of ignoring semi-mt device touch events, mark the device as
being semi-mt and allow initialization of the touch state. The touches
will then be used in calculating the cumulative_d{x,y} values that are
needed for clickpad support.

When handling the touch data for X event processing, simply skip over
reporting the touches.

Signed-off-by: Chase Douglas <chase.douglas at canonical.com>
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
---
 src/eventcomm.c    |    2 +-
 src/synaptics.c    |    3 +++
 src/synapticsstr.h |    1 +
 3 files changed, 5 insertions(+), 1 deletions(-)

diff --git a/src/eventcomm.c b/src/eventcomm.c
index d52cb6c..f199c24 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -764,7 +764,7 @@ event_query_touch(InputInfoPtr pInfo)
     {
         xf86IDrvMsg(pInfo, X_INFO,
                     "ignoring touch events for semi-multitouch device\n");
-        return;
+        priv->has_semi_mt = TRUE;
     }
 
     if (rc >= 0 && BitIsOn(&prop, INPUT_PROP_BUTTONPAD))
diff --git a/src/synaptics.c b/src/synaptics.c
index d422f0f..2770bd8 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2788,6 +2788,9 @@ HandleTouches(InputInfoPtr pInfo, struct SynapticsHwState *hw)
             new_active_touches--;
     }
 
+    if (priv->has_semi_mt)
+        goto out;
+
     if (priv->num_active_touches < min_touches &&
         new_active_touches < min_touches)
     {
diff --git a/src/synapticsstr.h b/src/synapticsstr.h
index ecf186f..84c8a97 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -269,6 +269,7 @@ struct _SynapticsPrivateRec
     Bool has_pressure;			/* device reports pressure */
     Bool has_width;			/* device reports finger width */
     Bool has_scrollbuttons;		/* device has physical scrollbuttons */
+    Bool has_semi_mt;			/* device is only semi-multitouch capable */
 
     enum TouchpadModel model;		/* The detected model */
     unsigned short id_vendor;		/* vendor id */
-- 
1.7.7.6



More information about the xorg-devel mailing list