Commit 9d6a1430 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: Add another workaround for bad side effects of CGWarpMouseCursorPosition().

parent 585028be
......@@ -1307,20 +1307,27 @@ int macdrv_err_on;
}
else
{
// Annoyingly, CGWarpMouseCursorPosition() effectively disassociates
// the mouse from the cursor position for 0.25 seconds. This means
// that mouse movement during that interval doesn't move the cursor
// and events carry a constant location (the warped-to position)
// even though they have delta values. For apps which warp the
// cursor frequently (like after every mouse move), this makes
// cursor movement horribly laggy and jerky, as only a fraction of
// mouse move events have any effect.
//
// On some versions of OS X, it's sufficient to forcibly reassociate
// the mouse and cursor position. On others, it's necessary to set
// the local events suppression interval to 0 for the warp. That's
// deprecated, but I'm not aware of any other way. For good
// measure, we do both.
CGSetLocalEventsSuppressionInterval(0);
ret = (CGWarpMouseCursorPosition(pos) == kCGErrorSuccess);
CGSetLocalEventsSuppressionInterval(0.25);
if (ret)
{
lastSetCursorPositionTime = [[NSProcessInfo processInfo] systemUptime];
// Annoyingly, CGWarpMouseCursorPosition() effectively disassociates
// the mouse from the cursor position for 0.25 seconds. This means
// that mouse movement during that interval doesn't move the cursor
// and events carry a constant location (the warped-to position)
// even though they have delta values. This screws us up because
// the accumulated deltas we send to Wine don't match any eventual
// absolute position we send (like with a button press). We can
// work around this by simply forcibly reassociating the mouse and
// cursor position.
CGAssociateMouseAndMouseCursorPosition(true);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment