diff -Naur xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c xcneu/programs/Xserver/hw/xfree86/common/xf86Xinput.c --- xc/programs/Xserver/hw/xfree86/common/xf86Xinput.c 2003-11-25 20:28:33.000000000 +0100 +++ xcneu/programs/Xserver/hw/xfree86/common/xf86Xinput.c 2004-10-21 19:29:00.000000000 +0200 @@ -932,10 +932,15 @@ /* modeled from xf86Events.c */ if (device->ptrfeed->ctrl.threshold) { if ((abs(dx) + abs(dy)) >= device->ptrfeed->ctrl.threshold) { - valuator[0] = (dx * device->ptrfeed->ctrl.num) / - device->ptrfeed->ctrl.den; - valuator[1] = (dy * device->ptrfeed->ctrl.num) / - device->ptrfeed->ctrl.den; + local->dxremaind = ((float)dx * (float)(device->ptrfeed->ctrl.num)) / + (float)(device->ptrfeed->ctrl.den) + local->dxremaind; + valuator[0] = (int)local->dxremaind; + local->dxremaind = local->dxremaind - (float)valuator[0]; + + local->dyremaind = ((float)dy * (float)(device->ptrfeed->ctrl.num)) / + (float)(device->ptrfeed->ctrl.den) + local->dyremaind; + valuator[1] = (int)local->dyremaind; + local->dyremaind = local->dyremaind - (float)valuator[1]; } } else if (dx || dy) {