From 51437995a5041a8c53c33b508b1607c78a5fa463 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Wed, 2 Mar 2011 16:50:55 +0000 Subject: Input: Don't call positionSprite for non-pointer devices If the device doesn't have any valuators, or if it has less than two of them, don't bother calling positionSprite. Users with one-dimensional pointing devices may be upset. Signed-off-by: Daniel Stone Reviewed-by: Peter Hutterer --- dix/getevents.c | 33 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 21 deletions(-) diff --git a/dix/getevents.c b/dix/getevents.c index 2c5138809..94da143e3 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -792,28 +792,19 @@ positionSprite(DeviceIntPtr dev, int mode, int old_screenx, old_screeny; double val, ret; - /* scale x&y to screen */ - if (dev->valuator && dev->valuator->numAxes > 0) { - val = *x + x_frac; - ret = rescaleValuatorAxis(val, dev->valuator->axes + 0, NULL, - scr->width); - *screenx = trunc(ret); - *screenx_frac = ret - trunc(ret); - } else { - *screenx = dev->last.valuators[0]; - *screenx_frac = dev->last.remainder[0]; - } + if (!dev->valuator || dev->valuator->numAxes < 2) + return; - if (dev->valuator && dev->valuator->numAxes > 1) { - val = *y + y_frac; - ret = rescaleValuatorAxis(val, dev->valuator->axes + 1, NULL, - scr->height); - *screeny = trunc(ret); - *screeny_frac = ret - trunc(ret); - } else { - *screeny = dev->last.valuators[1]; - *screeny_frac = dev->last.remainder[1]; - } + /* scale x&y to screen */ + val = *x + x_frac; + ret = rescaleValuatorAxis(val, dev->valuator->axes + 0, NULL, scr->width); + *screenx = trunc(ret); + *screenx_frac = ret - trunc(ret); + + val = *y + y_frac; + ret = rescaleValuatorAxis(val, dev->valuator->axes + 1, NULL, scr->height); + *screeny = trunc(ret); + *screeny_frac = ret - trunc(ret); /* Hit the left screen edge? */ if (*screenx <= 0 && *screenx_frac < 0.0f) -- cgit v1.2.3