Reputation: 3829
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?
Upvotes: 4
Views: 1212
Reputation: 5342
I ran into the same problem of wanting an alternative to the deprecated CGSetLocalEventsSuppressionInterval
to use in conjunction with CGWarpMouseCursorPosition
and this worked in C++:
CGEventSourceRef source = CGEventSourceCreate(CGEventSourceStateID::kCGEventSourceStateCombinedSessionState);
CGEventSourceSetLocalEventsSuppressionInterval(source, 0);
CGWarpMouseCursorPosition(CGPointMake(x, y));
CFRelease(source);
Upvotes: 0
Reputation: 227
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.
Upvotes: 5
Reputation: 557
Did you ever solve this problem?
Have you tried using CGEventCreateSourceFromEvent(...) to create your CGEventSourceRef from a CGEventRef?
Upvotes: 3