diff options
Diffstat (limited to 'src/evdev.c')
-rw-r--r-- | src/evdev.c | 52 |
1 files changed, 30 insertions, 22 deletions
diff --git a/src/evdev.c b/src/evdev.c index c2ce29d..d1ed9ee 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -483,31 +483,39 @@ EvdevProcessValuators(InputInfoPtr pInfo) EvdevPtr pEvdev = pInfo->private; int *delta = pEvdev->delta; - /* convert to relative motion for touchpads */ - if (pEvdev->abs_queued && (pEvdev->flags & EVDEV_RELATIVE_MODE)) { - if (pEvdev->in_proximity) { - if (valuator_mask_isset(pEvdev->vals, 0)) - { - if (valuator_mask_isset(pEvdev->old_vals, 0)) - delta[REL_X] = valuator_mask_get(pEvdev->vals, 0) - - valuator_mask_get(pEvdev->old_vals, 0); - valuator_mask_set(pEvdev->old_vals, 0, - valuator_mask_get(pEvdev->vals, 0)); - } - if (valuator_mask_isset(pEvdev->vals, 1)) - { - if (valuator_mask_isset(pEvdev->old_vals, 1)) - delta[REL_Y] = valuator_mask_get(pEvdev->vals, 1) - - valuator_mask_get(pEvdev->old_vals, 1); - valuator_mask_set(pEvdev->old_vals, 1, - valuator_mask_get(pEvdev->vals, 1)); + if (pEvdev->abs_queued) { + /* convert to relative motion for touchpads */ + if (pEvdev->flags & EVDEV_RELATIVE_MODE) { + if (pEvdev->in_proximity) { + if (valuator_mask_isset(pEvdev->vals, 0)) + { + if (valuator_mask_isset(pEvdev->old_vals, 0)) + delta[REL_X] = valuator_mask_get(pEvdev->vals, 0) - + valuator_mask_get(pEvdev->old_vals, 0); + valuator_mask_set(pEvdev->old_vals, 0, + valuator_mask_get(pEvdev->vals, 0)); + } + if (valuator_mask_isset(pEvdev->vals, 1)) + { + if (valuator_mask_isset(pEvdev->old_vals, 1)) + delta[REL_Y] = valuator_mask_get(pEvdev->vals, 1) - + valuator_mask_get(pEvdev->old_vals, 1); + valuator_mask_set(pEvdev->old_vals, 1, + valuator_mask_get(pEvdev->vals, 1)); + } + } else { + valuator_mask_zero(pEvdev->old_vals); } + valuator_mask_zero(pEvdev->vals); + pEvdev->abs_queued = 0; + pEvdev->rel_queued = 1; } else { - valuator_mask_zero(pEvdev->old_vals); + int val; + if (valuator_mask_fetch(pEvdev->vals, 0, &val)) + valuator_mask_set(pEvdev->old_vals, 0, val); + if (valuator_mask_fetch(pEvdev->vals, 1, &val)) + valuator_mask_set(pEvdev->old_vals, 1, val); } - valuator_mask_zero(pEvdev->vals); - pEvdev->abs_queued = 0; - pEvdev->rel_queued = 1; } if (pEvdev->rel_queued) { |