aboutsummaryrefslogtreecommitdiffstats
path: root/src/nativewindow/classes/com
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2014-01-05 18:23:06 +0100
committerSven Gothel <[email protected]>2014-01-05 18:23:06 +0100
commitdd527308f9129c705d82e6421e4822ba1a48abb9 (patch)
tree9e90d4079dabec79b1e9e46b100e4a09e47a9195 /src/nativewindow/classes/com
parent58756bbd1d1fd63bb84dbfe2d6419d63de2da7ba (diff)
Bug 935: NEWT PointerIcon/Visibility: Perform JAWTWindow's OffscreenLayerSurface PointerIcon/Visibility tasks async on AWT-EDT
setCursor(..) and hideCursor(..) must happen on the AWT-EDT w/o blocking, otherwise we may deadlock the NEWT-EDT.
Diffstat (limited to 'src/nativewindow/classes/com')
-rw-r--r--src/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java b/src/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java
index 46bdc4d1f..b947505cb 100644
--- a/src/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java
+++ b/src/nativewindow/classes/com/jogamp/nativewindow/awt/JAWTWindow.java
@@ -39,6 +39,7 @@ package com.jogamp.nativewindow.awt;
import com.jogamp.common.os.Platform;
import com.jogamp.common.util.IOUtil;
+import com.jogamp.common.util.awt.AWTEDTExecutor;
import com.jogamp.common.util.locks.LockFactory;
import com.jogamp.common.util.locks.RecursiveLock;
import com.jogamp.nativewindow.MutableGraphicsConfiguration;
@@ -432,26 +433,33 @@ public abstract class JAWTWindow implements NativeWindow, OffscreenLayerSurface,
}
@Override
- public final boolean setCursor(IOUtil.ClassResources resources, PointImmutable hotSpot) throws IOException {
- final Cursor c;
- if( null == resources || null == hotSpot ) {
- c = Cursor.getDefaultCursor();
- } else {
- final java.awt.Point awtHotspot = new java.awt.Point(hotSpot.getX(), hotSpot.getY());
- c = AWTMisc.getCursor(resources, awtHotspot);
- }
- if( null != c ) {
- component.setCursor(c);
- return true;
- } else {
- return false;
- }
+ public final boolean setCursor(final IOUtil.ClassResources resources, final PointImmutable hotSpot) throws IOException {
+ AWTEDTExecutor.singleton.invoke(false, new Runnable() {
+ public void run() {
+ Cursor c = null;
+ if( null == resources || null == hotSpot ) {
+ c = Cursor.getDefaultCursor();
+ } else {
+ final java.awt.Point awtHotspot = new java.awt.Point(hotSpot.getX(), hotSpot.getY());
+ try {
+ c = AWTMisc.getCursor(resources, awtHotspot);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ if( null != c ) {
+ component.setCursor(c);
+ }
+ } } );
+ return true;
}
@Override
public boolean hideCursor() {
- final Cursor c = AWTMisc.getNullCursor();
- component.setCursor(c);
+ AWTEDTExecutor.singleton.invoke(false, new Runnable() {
+ public void run() {
+ component.setCursor(AWTMisc.getNullCursor());
+ } } );
return true;
}