This resolves a regression from da461b91659d0c64aa6827e065aee2682116a57e where three touch tap and click actions on certain devices no longer work.
Some devices report a higher touch count than the number of touches they can provide data for. For example, many Synaptics touchpads can report up to five touches, but only provide data for two of them. We need to be able to report the correct number of touches for these devices when there are three touches. Using the maximum of the reported touch count and the number of touches provided ensures the count is accurate for all device types. Signed-off-by: Chase Douglas <[email protected]> --- src/eventcomm.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/eventcomm.c b/src/eventcomm.c index 28d034f..3ceb98c 100644 --- a/src/eventcomm.c +++ b/src/eventcomm.c @@ -624,11 +624,6 @@ static int count_fingers(InputInfoPtr pInfo, const struct CommData *comm) struct eventcomm_proto_data *proto_data = priv->proto_data; int fingers = 0; -#ifdef HAVE_MULTITOUCH - if (priv->has_touch) - return proto_data->num_touches; -#endif - if (comm->oneFinger) fingers = 1; else if (comm->twoFingers) @@ -636,6 +631,11 @@ static int count_fingers(InputInfoPtr pInfo, const struct CommData *comm) else if (comm->threeFingers) fingers = 3; +#ifdef HAVE_MULTITOUCH + if (priv->has_touch && proto_data->num_touches > fingers) + fingers = proto_data->num_touches; +#endif + return fingers; } -- 1.7.9.1 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
