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.doug...@canonical.com>
---
 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 a1f334b..92f99a9 100644
--- a/src/eventcomm.c
+++ b/src/eventcomm.c
@@ -759,7 +759,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 58fc02c..05ea6b9 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -2691,6 +2691,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 bdea96a..944fd6b 100644
--- a/src/synapticsstr.h
+++ b/src/synapticsstr.h
@@ -267,6 +267,7 @@ typedef 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.9

_______________________________________________
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to