From c5e312bb9e1e69dc91acdb6dbbe16bd17536282c Mon Sep 17 00:00:00 2001 From: Dmitry Batrak Date: Thu, 14 Jan 2021 15:47:22 +0300 Subject: [PATCH] refactor nativeCreateNSWindow call wrapping as part of JBR-3017 (cherry picked from commit eeef67a335b0c066e4ed84f30a5d63056969cf39) --- .../sun/lwawt/macosx/CPlatformWindow.java | 56 ++++++++++--------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java index 1517315977aa..38ca3bb2537c 100644 --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java @@ -356,44 +356,41 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } else { bounds = _peer.constrainBounds(_target.getBounds()); } - long nativeWindowPtr = AWTThreading.executeWaitToolkit(() -> { - AtomicLong ref = new AtomicLong(); - contentView.execute(viewPtr -> { - boolean hasOwnerPtr = false; + AtomicLong ref = new AtomicLong(); + contentView.execute(viewPtr -> { + boolean hasOwnerPtr = false; - if (owner != null) { - hasOwnerPtr = 0L != owner.executeGet(ownerPtr -> { - if (logger.isLoggable(PlatformLogger.Level.FINE)) { - logger.fine("nativeCreateNSWindow: owner=" + Long.toHexString(ownerPtr) - + ", styleBits=" + Integer.toHexString(styleBits) - + ", bounds=" + bounds); - } - long windowPtr = nativeCreateNSWindow(viewPtr, ownerPtr, styleBits, - bounds.x, bounds.y, bounds.width, bounds.height); - if (logger.isLoggable(PlatformLogger.Level.FINE)) { - logger.fine("window created: " + Long.toHexString(windowPtr)); - } - ref.set(windowPtr); - return 1; - }); - } - - if (!hasOwnerPtr) { + if (owner != null) { + hasOwnerPtr = 0L != owner.executeGet(ownerPtr -> { if (logger.isLoggable(PlatformLogger.Level.FINE)) { - logger.fine("nativeCreateNSWindow: styleBits=" + Integer.toHexString(styleBits) + logger.fine("createNSWindow: owner=" + Long.toHexString(ownerPtr) + + ", styleBits=" + Integer.toHexString(styleBits) + ", bounds=" + bounds); } - long windowPtr = nativeCreateNSWindow(viewPtr, 0, styleBits, + long windowPtr = createNSWindow(viewPtr, ownerPtr, styleBits, bounds.x, bounds.y, bounds.width, bounds.height); if (logger.isLoggable(PlatformLogger.Level.FINE)) { logger.fine("window created: " + Long.toHexString(windowPtr)); } ref.set(windowPtr); + return 1; + }); + } + + if (!hasOwnerPtr) { + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("createNSWindow: styleBits=" + Integer.toHexString(styleBits) + + ", bounds=" + bounds); } - }); - return ref.get(); + long windowPtr = createNSWindow(viewPtr, 0, styleBits, + bounds.x, bounds.y, bounds.width, bounds.height); + if (logger.isLoggable(PlatformLogger.Level.FINE)) { + logger.fine("window created: " + Long.toHexString(windowPtr)); + } + ref.set(windowPtr); + } }); - setPtr(nativeWindowPtr); + setPtr(ref.get()); if (peer != null) { // Not applicable to CWarningWindow peer.setTextured(IS(TEXTURED, styleBits)); } @@ -1414,6 +1411,11 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo } return false; } + + private long createNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h) { + return AWTThreading.executeWaitToolkit(() -> nativeCreateNSWindow(nsViewPtr, ownerPtr, styleBits, x, y, w, h)); + } + // ---------------------------------------------------------------------- // NATIVE CALLBACKS // ----------------------------------------------------------------------