diff options
author | Sven Gothel <[email protected]> | 2019-12-08 09:44:35 +0100 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2019-12-08 09:44:35 +0100 |
commit | 12eed5d38616d23b6e8e2e5b497dfc2f54d90c90 (patch) | |
tree | 236ec2c72d90c82202653bb1949735bfa047e735 /src | |
parent | 5e6f75991d885f1e48760668f86b305824bd972a (diff) |
Bug 1393: Resolve EDT + AppKit Deadlock with native parenting: Fetch parent screen position directly w/o locking.
Diffstat (limited to 'src')
-rw-r--r-- | src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java index 67cd188eb..2934375a3 100644 --- a/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java +++ b/src/newt/classes/jogamp/newt/driver/macosx/WindowDriver.java @@ -460,7 +460,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl OSXUtil.RunOnMainThread(true, false, new Runnable() { @Override public void run() { - updateSizePosInsets0(getWindowHandle(), false); + updateSizePosInsets0(getWindowHandle(), false); // calls: sizeScreenPosInsetsChanged(..) } } ); } visibleChanged(0 != ( STATE_MASK_VISIBLE & flags)); @@ -476,7 +476,7 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl setWindowClientTopLeftPointAndSize0(oldWindowHandle, pClientLevelOnSreen.getX(), pClientLevelOnSreen.getY(), width, height, 0 != ( STATE_MASK_VISIBLE & flags)); - updateSizePosInsets0(oldWindowHandle, false); + updateSizePosInsets0(oldWindowHandle, false); // calls: sizeScreenPosInsetsChanged(..) } } ); } else { // else offscreen size is realized via recreation // no native event (fullscreen, some reparenting) @@ -523,7 +523,8 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl } private Point getLocationOnScreenByParent(final int x, final int y, final NativeWindow parent) { - return new Point(x, y).translate( parent.getLocationOnScreen(null) ); + // return new Point(x, y).translate( parent.getLocationOnScreen(null) ); // Bug 1393: deadlock AppKit + EDT + return new Point(x, y).translate( OSXUtil.GetLocationOnScreen(parent.getWindowHandle(), 0, 0) ); // non-blocking } /** Callback for native screen position change event of the client area. */ @@ -541,7 +542,8 @@ public class WindowDriver extends WindowImpl implements MutableSurface, DriverCl public void run() { // screen position -> rel child window position final Point absPos = new Point(newX, newY); - final Point parentOnScreen = parent.getLocationOnScreen(null); + // final Point parentOnScreen = parent.getLocationOnScreen(null); // Bug 1393: deadlock AppKit + EDT + final Point parentOnScreen = OSXUtil.GetLocationOnScreen(parent.getWindowHandle(), 0, 0); // non-blocking absPos.translate( parentOnScreen.scale(-1, -1) ); if(DEBUG_IMPLEMENTATION) { System.err.println("MacWindow.positionChanged.1 (Screen Pos - CHILD): ("+getThreadName()+"): (defer: "+defer+") "+getX()+"/"+getY()+" -> absPos "+newX+"/"+newY+", parentOnScreen "+parentOnScreen+" -> "+absPos); |