When programmatically moving the mouse cursor, you must set CGSetLocalEventsSuppressionInterval
to 0
so the events come in in real-time as opposed to with a 250 millisecond delay.
Unfortunately, CGSetLocalEventsSuppressionInterval
is marked as deprecated in Snow Leopard.
The alternative is CGEventSourceSetLocalEventsSuppressionInterval(CGEventSourceRef source, CFTimeInterval seconds);
https://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html#//apple_ref/c/func/CGEventSourceSetLocalEventsSuppressionInterval
-(void) mouseMovement:(CGEventRef) newUserMouseMovement
{
//Move cursor to new position
CGSetLocalEventsSuppressionInterval(0.0); //Deprecated in OS X 10.6
CGWarpMouseCursorPosition(NSPointToCGPoint(newMousePosition));
CGSetLocalEventsSuppressionInterval(0.25); //Deprecated in OS X 10.6
//--OR--//
CGEventSourceRef source = ???;
CGEventSourceSetLocalEventsSuppressionInterval(source, 0.0);
CGWarpMouseCursorPosition(NSPointToCGPoint(newMousePosition));
CGEventSourceSetLocalEventsSuppressionInterval(source, 0.25);
}
I can't get the latter method to work.
So I guess my question is how do I get the CGEventSourceRef
required for that function?
Is it the event source for the user's normal mouse movement? Or for my manual warping of the cursor?
CGEventSourceRef
for the warp. The apple docs state the warp works "without generating or posting an event", so I'm not sure if it even has a source. From the answer I just accepted, though, 'CGAssociateMouseAndMouseCursorPosition(true);' works with warp! – Psychotic