aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2010-12-23 12:13:16 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2011-01-04 08:12:21 +1000
commitbed25600f66db245b895a48d6edca30568ca7559 (patch)
tree8f70146c32a2af4d7ea9bff970488106e67a8cc1
parentAdd use_proximity bit for BTN_TOOL handling. (diff)
downloadxf86-input-evdev-bed25600f66db245b895a48d6edca30568ca7559.tar.gz
xf86-input-evdev-bed25600f66db245b895a48d6edca30568ca7559.tar.bz2
xf86-input-evdev-bed25600f66db245b895a48d6edca30568ca7559.zip
Don't update first_val and num_val if we don't have data (#32480)
For touchpads, rel_queued may be on (due to abs to rel conversion) but the delta for x/y is 0/0 on the first touch. Hence, we don't have any valuators to post. The current results in a num_vals of -15 and a subsequent segfault when the data is posted to the server. Start with a last valuator of -1, so that we know if we have at least one to post. X.Org Bug 32480 <http://bugs.freedesktop.org/show_bug.cgi?id=32480> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
-rw-r--r--src/evdev.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/evdev.c b/src/evdev.c
index 50847a8..d47b6c2 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -402,7 +402,7 @@ EvdevProcessValuators(InputInfoPtr pInfo, int v[MAX_VALUATORS], int *num_v,
}
if (pEvdev->rel_queued) {
- int first = REL_CNT, last = 0;
+ int first = REL_CNT, last = -1;
int i;
if (pEvdev->swap_axes) {
@@ -428,8 +428,11 @@ EvdevProcessValuators(InputInfoPtr pInfo, int v[MAX_VALUATORS], int *num_v,
}
}
- *num_v = (last - first + 1);
- *first_v = first;
+ if (last >= 0)
+ {
+ *num_v = (last - first + 1);
+ *first_v = first;
+ }
}
/*
* Some devices only generate valid abs coords when BTN_TOOL_PEN is