mirror of
https://github.com/X11Libre/xf86-input-evdev.git
synced 2026-03-24 09:44:28 +00:00
Fix absolute events with swapped axes
We were correctly swapping the valuator values, but we were not
calling valuator_mask_unset() when needed, so the cursor kept jumping
to the edges.
This patch does the swapping before the main "for", so we don't need to
store unswapped_{x,y} and unswapped_isset_{x,y} even when we don't need
to swap.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
committed by
Peter Hutterer
parent
a9cdb6590c
commit
8d6dfd13b0
31
src/evdev.c
31
src/evdev.c
@@ -436,10 +436,30 @@ EvdevProcessValuators(InputInfoPtr pInfo)
|
||||
* just works.
|
||||
*/
|
||||
else if (pEvdev->abs_queued && pEvdev->in_proximity) {
|
||||
int unswapped_x = valuator_mask_get(pEvdev->vals, 0);
|
||||
int unswapped_y = valuator_mask_get(pEvdev->vals, 1);
|
||||
int i;
|
||||
|
||||
if (pEvdev->swap_axes) {
|
||||
int swapped_isset[2] = {0, 0};
|
||||
int swapped_values[2];
|
||||
|
||||
for(i = 0; i <= 1; i++)
|
||||
if (valuator_mask_isset(pEvdev->vals, i)) {
|
||||
swapped_isset[1 - i] = 1;
|
||||
swapped_values[1 - i] =
|
||||
xf86ScaleAxis(valuator_mask_get(pEvdev->vals, i),
|
||||
pEvdev->absinfo[1 - i].maximum,
|
||||
pEvdev->absinfo[1 - i].minimum,
|
||||
pEvdev->absinfo[i].maximum,
|
||||
pEvdev->absinfo[i].minimum);
|
||||
}
|
||||
|
||||
for (i = 0; i <= 1; i++)
|
||||
if (swapped_isset[i])
|
||||
valuator_mask_set(pEvdev->vals, i, swapped_values[i]);
|
||||
else
|
||||
valuator_mask_unset(pEvdev->vals, i);
|
||||
}
|
||||
|
||||
for (i = 0; i <= 1; i++) {
|
||||
int val;
|
||||
int calib_min;
|
||||
@@ -458,13 +478,6 @@ EvdevProcessValuators(InputInfoPtr pInfo)
|
||||
calib_max = pEvdev->calibration.max_y;
|
||||
}
|
||||
|
||||
if (pEvdev->swap_axes)
|
||||
val = xf86ScaleAxis((i == 0 ? unswapped_y : unswapped_x),
|
||||
pEvdev->absinfo[i].maximum,
|
||||
pEvdev->absinfo[i].minimum,
|
||||
pEvdev->absinfo[1 - i].maximum,
|
||||
pEvdev->absinfo[1 - i].minimum);
|
||||
|
||||
if (pEvdev->flags & EVDEV_CALIBRATED)
|
||||
val = xf86ScaleAxis(val, pEvdev->absinfo[i].maximum,
|
||||
pEvdev->absinfo[i].minimum, calib_max,
|
||||
|
||||
Reference in New Issue
Block a user