src/windows/classes/sun/awt/windows/WGlobalCursorManager.java

Print this page

        

@@ -25,10 +25,12 @@
 
 package sun.awt.windows;
 
 import java.awt.*;
 import sun.awt.GlobalCursorManager;
+import sun.awt.LightweightFrame;
+import sun.swing.JLightweightFrame;
 
 public final class WGlobalCursorManager extends GlobalCursorManager {
     private static WGlobalCursorManager manager;
 
     public static GlobalCursorManager getCursorManager() {

@@ -44,11 +46,21 @@
      */
     public static void nativeUpdateCursor(Component heavy) {
         WGlobalCursorManager.getCursorManager().updateCursorLater(heavy);
     }
 
-    protected native void setCursor(Component comp, Cursor cursor, boolean u);
+    protected void setCursor(final Component comp, final Cursor cursor, final boolean u) {
+        JLightweightFrame lwFrameUnderCursor = (JLightweightFrame)WLightweightFramePeer.getFrameUnderCursor();
+        if (lwFrameUnderCursor != null) {
+            lwFrameUnderCursor.invokeOnContentsThread(() -> setCursorDirect(comp, cursor, u));
+        } else {
+            setCursorImpl(comp, cursor, u);
+        }
+    }
+
+    protected native void setCursorImpl(Component comp, Cursor cursor, boolean u);
+    protected native void setCursorDirect(Component component, Cursor cursor, boolean u);
     protected native void getCursorPos(Point p);
     protected native Component findComponentAt(Container con, int x, int y);
     /*
      * two native methods to call corresponding methods in Container and
      * Component