diff options
author | Chase Douglas <chase.douglas@canonical.com> | 2011-04-15 12:14:03 -0400 |
---|---|---|
committer | Peter Hutterer <peter.hutterer@who-t.net> | 2011-04-18 13:56:32 +1000 |
commit | ebe41bfba77ba9c95d990d47d5e8f5a8a4f7477e (patch) | |
tree | a14751adac3b49e8f5ffdb561e9d2d391b5be135 | |
parent | 68a6a18fc2fe1d95c9196c1948a27f9e95029bec (diff) |
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>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
-rw-r--r-- | src/evdev.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/evdev.c b/src/evdev.c index bad7bb8..b1a822b 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; |