--- vmmouse.c 2007-09-26 01:11:47.000000000 +0200 +++ vmmouse-new.c 2007-12-04 22:44:21.000000000 +0100 @@ -960,12 +960,15 @@ static void GetVMMouseMotionEvent(InputInfoPtr pInfo){ MouseDevPtr pMse; + VMMousePrivPtr mPriv; int buttons, dx, dy, dz, dw; + double factorX, factorY; VMMOUSE_INPUT_DATA vmmouseInput; int ps2Buttons = 0; int numPackets; pMse = pInfo->private; + mPriv = pMse->mousePriv; while((numPackets = VMMouseClient_GetInput(&vmmouseInput))){ if (numPackets == VMMOUSE_ERROR) { VMMouseClient_Disable(); @@ -990,6 +993,13 @@ dy = vmmouseInput.Y; dz = (char)vmmouseInput.Z; dw = 0; + /* scale the input data based on the screen dimensions */ + factorX = ((double) screenInfo.screens[mPriv->screenNum]->width) / (double) 65535; + factorY = ((double) screenInfo.screens[mPriv->screenNum]->height) / (double) 65535; + + dx = dx * factorX + 0.5; + dy = dy * factorY + 0.5; + /* post an event */ pMse->PostEvent(pInfo, buttons, dx, dy, dz, dw); }