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-11-15 01:14:53.000000000 +0100 @@ -274,6 +274,8 @@ local->dxremaind = 0.0; local->dyremaind = 0.0; + local->dxremaindden = 0; + local->dyremaindden = 0; if (InitIntegerFeedbackClassDeviceStruct(dev, xf86AlwaysCoreControl) == FALSE) { ErrorF("Unable to init integer feedback for always core feature\n"); @@ -932,10 +934,13 @@ /* 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->dxremaindden = dx * device->ptrfeed->ctrl.num + local->dxremaindden; + valuator[0] = local->dxremaindden / device->ptrfeed->ctrl.den; + local->dxremaindden = local->dxremaindden - valuator[0] * device->ptrfeed->ctrl.den; + + local->dyremaindden = dy * device->ptrfeed->ctrl.num + local->dyremaindden; + valuator[1] = local->dyremaindden / device->ptrfeed->ctrl.den; + local->dyremaindden = local->dyremaindden - valuator[1] * device->ptrfeed->ctrl.den; } } else if (dx || dy) { diff -Naur xc/programs/Xserver/hw/xfree86/common/xf86Xinput.h xcneu/programs/Xserver/hw/xfree86/common/xf86Xinput.h --- xc/programs/Xserver/hw/xfree86/common/xf86Xinput.h 2003-11-25 20:28:33.000000000 +0100 +++ xcneu/programs/Xserver/hw/xfree86/common/xf86Xinput.h 2004-11-14 23:25:13.000000000 +0100 @@ -149,6 +149,8 @@ int old_y; float dxremaind; float dyremaind; + int dxremaindden; + int dyremaindden; char * type_name; IntegerFeedbackPtr always_core_feedback; IDevPtr conf_idev;