diff options
Diffstat (limited to 'xorg-server/dix')
-rw-r--r-- | xorg-server/dix/getevents.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/xorg-server/dix/getevents.c b/xorg-server/dix/getevents.c index 6ea4ba010..306d0ff09 100644 --- a/xorg-server/dix/getevents.c +++ b/xorg-server/dix/getevents.c @@ -840,10 +840,15 @@ scale_to_desktop(DeviceIntPtr dev, ValuatorMask *mask, ScreenPtr scr = miPointerGetScreen(dev); double x, y; - BUG_WARN(!dev->valuator); - BUG_WARN(dev->valuator->numAxes < 2); + BUG_WARN(!dev->valuator || dev->valuator->numAxes < 2); if (!dev->valuator || dev->valuator->numAxes < 2) + { + /* if we have no axes, last.valuators must be in screen coords + * anyway */ + *devx = *screenx = dev->last.valuators[0]; + *devy = *screeny = dev->last.valuators[1]; return scr; + } if (valuator_mask_isset(mask, 0)) x = valuator_mask_get_double(mask, 0); @@ -1493,8 +1498,6 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, { CARD32 ms = GetTimeInMillis(); int num_events = 0, nev_tmp; - int h_scroll_axis = pDev->valuator->h_scroll_axis; - int v_scroll_axis = pDev->valuator->v_scroll_axis; ValuatorMask mask; ValuatorMask scroll; int i; @@ -1519,6 +1522,14 @@ GetPointerEvents(InternalEvent *events, DeviceIntPtr pDev, int type, { double val, adj; int axis; + int h_scroll_axis = -1; + int v_scroll_axis = -1; + + if (pDev->valuator) + { + h_scroll_axis = pDev->valuator->h_scroll_axis; + v_scroll_axis = pDev->valuator->v_scroll_axis; + } /* Up is negative on valuators, down positive */ switch (buttons) { |