[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