summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'x11-drivers/xf86-input-evdev/files/xf86-input-evdev-fix_valuator_procimity_handling.patch')
-rw-r--r--x11-drivers/xf86-input-evdev/files/xf86-input-evdev-fix_valuator_procimity_handling.patch44
1 files changed, 44 insertions, 0 deletions
diff --git a/x11-drivers/xf86-input-evdev/files/xf86-input-evdev-fix_valuator_procimity_handling.patch b/x11-drivers/xf86-input-evdev/files/xf86-input-evdev-fix_valuator_procimity_handling.patch
new file mode 100644
index 0000000..8b014ae
--- /dev/null
+++ b/x11-drivers/xf86-input-evdev/files/xf86-input-evdev-fix_valuator_procimity_handling.patch
@@ -0,0 +1,44 @@
+From 6139f903bc1942b160d3d94828d9aa66d9d3febd Mon Sep 17 00:00:00 2001
+From: Chase Douglas <chase.douglas@canonical.com>
+Date: Thu, 14 Apr 2011 15:48:10 -0400
+Subject: [PATCH] Copy out of proximity values into current values selectively
+
+Otherwise, an event that causes us to go into proximity with some new
+valuator values will retain some old valuator values from when last in
+proximity. This change ensures that all values posted while out of
+proximity are accounted for.
+
+Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+---
+ src/evdev.c | 15 ++++++++-------
+ 1 files changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/src/evdev.c b/src/evdev.c
+index b767b0e..f31f492 100644
+--- a/src/evdev.c
++++ b/src/evdev.c
+@@ -525,13 +525,14 @@ EvdevProcessProximityState(InputInfoPtr pInfo)
+ {
+ /* We're about to go into/out of proximity but have no abs events
+ * within the EV_SYN. Use the last coordinates we have. */
+- if (!pEvdev->abs_queued &&
+- valuator_mask_num_valuators(pEvdev->prox) > 0)
+- {
+- valuator_mask_copy(pEvdev->vals, pEvdev->prox);
+- valuator_mask_zero(pEvdev->prox);
+- pEvdev->abs_queued = 1;
+- }
++ for (i = 0; i < valuator_mask_size(pEvdev->prox); i++)
++ if (!valuator_mask_isset(pEvdev->vals, i) &&
++ valuator_mask_isset(pEvdev->prox, i))
++ valuator_mask_set(pEvdev->vals, i,
++ valuator_mask_get(pEvdev->prox, i));
++ valuator_mask_zero(pEvdev->prox);
++
++ pEvdev->abs_queued = valuator_mask_size(pEvdev->vals);
+ }
+
+ pEvdev->in_proximity = prox_state;
+--
+1.7.4.1
+