--- src/mouse.c 2009-03-07 18:39:08.000000000 -0800 +++ src/mouse.c 2009-03-07 18:46:48.000000000 -0800 @@ -2156,7 +2156,10 @@ if (pMse->emulateWheel) { /* Emulate wheel button handling */ - wheelButtonMask = 1 << (pMse->wheelButton - 1); + if(pMse->wheelButton == 0) + wheelButtonMask = 0; + else + wheelButtonMask = 1 << (pMse->wheelButton - 1); if (change & wheelButtonMask) { if (buttons & wheelButtonMask) { @@ -2179,7 +2182,7 @@ ms = pMse->wheelButtonExpires - GetTimeInMillis (); /* Intercept wheel emulation. */ - if (buttons & wheelButtonMask) { + if ((buttons & wheelButtonMask) || wheelButtonMask==0) { if (ms <= 0) { /* Y axis movement */ if (pMse->negativeY != MSE_NOAXISMAP) { @@ -2195,6 +2198,7 @@ while (abs(pMse->wheelYDistance) > pMse->wheelInertia) { pMse->wheelYDistance -= emuWheelDelta; + pMse->wheelXDistance = 0; /* * Synthesize the press and release, but not when * the button to be synthesized is already pressed @@ -2222,6 +2226,7 @@ while (abs(pMse->wheelXDistance) > pMse->wheelInertia) { pMse->wheelXDistance -= emuWheelDelta; + pMse->wheelYDistance = 0; /* * Synthesize the press and release, but not when * the button to be synthesized is already pressed