Using `CGEventSourceSetLocalEventsSuppressionInterval` instead of the deprecated `CGSetLocalEventsSuppressionInterval`

cocoa, macos, macos-carbon, objective-c

Solution

Event sources don't seem to be explained anywhere, and no one knows how to use them.

CGPoint warpPoint = CGPointMake(42, 42);
CGWarpMouseCursorPosition(warpPoint);
CGAssociateMouseAndMouseCursorPosition(true);

Call CGAssociateMouseAndMouseCursorPosition( true ) immediately after a warp call to make the Quartz events system drop the delay for this specific warp.

Problem

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?

Original source