diff --git a/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java b/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java index b17618452ace759dc641af73e427b191cb399e20..6554dc9028f5ba4bb9f90d90823cdf11fa599a0c 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java +++ b/src/macosx/classes/sun/lwawt/macosx/CCursorManager.java @@ -36,6 +36,7 @@ final class CCursorManager extends LWCursorManager { private static native Point2D nativeGetCursorPosition(); private static native void nativeSetBuiltInCursor(final int type, final String name); private static native void nativeSetCustomCursor(final long imgPtr, final double x, final double y); + public static native void nativeSetAllowsCursorSetInBackground(final boolean allows); private static final int NAMED_CURSOR = -1; diff --git a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java index e173d7372f23ec1ec6552a152f5f77d82ddf5c5e..fa711c9a9d288a379a39340cace862fb21908ab3 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java +++ b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java @@ -76,6 +76,12 @@ public class CEmbeddedFrame extends EmbeddedFrame { int screenX = locationOnScreen.x + x; int screenY = locationOnScreen.y + y; + if (eventType == CocoaConstants.NPCocoaEventMouseEntered) { + CCursorManager.nativeSetAllowsCursorSetInBackground(true); + } else if (eventType == CocoaConstants.NPCocoaEventMouseExited) { + CCursorManager.nativeSetAllowsCursorSetInBackground(false); + } + responder.handleMouseEvent(eventType, modifierFlags, buttonNumber, clickCount, x, y, screenX, screenY); } diff --git a/src/macosx/native/sun/awt/CCursorManager.m b/src/macosx/native/sun/awt/CCursorManager.m index 029332912638948725c2aec262cd2f2675947d83..e7378d3929a91d1dec46a494f864c560b01fb3f0 100644 --- a/src/macosx/native/sun/awt/CCursorManager.m +++ b/src/macosx/native/sun/awt/CCursorManager.m @@ -137,3 +137,30 @@ JNF_COCOA_EXIT(env); return jpt; } + + +JNIEXPORT void JNICALL +Java_sun_lwawt_macosx_CCursorManager_nativeSetAllowsCursorSetInBackground +(JNIEnv *env, jclass class, jboolean allows) +{ + +JNF_COCOA_ENTER(env); +AWT_ASSERT_NOT_APPKIT_THREAD; + + SEL allowsSetInBackground_SEL = @selector(javaSetAllowsCursorSetInBackground:); + if ([[NSCursor class] respondsToSelector:allowsSetInBackground_SEL]) { + [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){ + NSMethodSignature *allowsSetInBackground_sig = + [[NSCursor class] methodSignatureForSelector:allowsSetInBackground_SEL]; + NSInvocation *invocation = + [NSInvocation invocationWithMethodSignature:allowsSetInBackground_sig]; + BOOL arg = (BOOL)allows; + [invocation setSelector:allowsSetInBackground_SEL]; + [invocation setArgument:&arg atIndex:2]; + [invocation invokeWithTarget:[NSCursor class]]; + }]; + } + +JNF_COCOA_EXIT(env); + +}