summaryrefslogtreecommitdiff
blob: 8b014ae536903d63be78ce1a0e11ed0c8bf9019b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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