--- old/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2016-09-06 17:09:39.000000000 +0300 +++ new/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java 2016-09-06 17:09:39.000000000 +0300 @@ -25,10 +25,12 @@ package sun.lwawt.macosx; +import com.apple.eawt.FullScreenAdapter; +import com.apple.eawt.FullScreenUtilities; +import com.apple.eawt.event.FullScreenEvent; import java.awt.*; import java.awt.Dialog.ModalityType; import java.awt.event.*; -import java.awt.peer.WindowPeer; import java.beans.*; import java.lang.reflect.InvocationTargetException; @@ -44,6 +46,7 @@ import com.apple.laf.*; import com.apple.laf.ClientPropertyApplicator.Property; import com.sun.awt.AWTUtilities; +import sun.lwawt.LWWindowPeer.PeerType; public class CPlatformWindow extends CFRetainedResource implements PlatformWindow { private native long nativeCreateNSWindow(long nsViewPtr,long ownerPtr, long styleBits, double x, double y, double w, double h); @@ -209,6 +212,9 @@ private volatile boolean isFullScreenMode; private boolean isFullScreenAnimationOn; + private FullScreenAdapter fsa; + private volatile boolean isInFullScreen; + private Window target; private LWWindowPeer peer; protected CPlatformView contentView; @@ -217,7 +223,7 @@ private boolean undecorated; // initialized in getInitialStyleBits() private Rectangle normalBounds = null; // not-null only for undecorated maximized windows private CPlatformResponder responder; - + public CPlatformWindow() { super(0, true); } @@ -257,6 +263,25 @@ rootpane.removePropertyChangeListener("ancestor", this); } }); + if (getPeer().getPeerType() == PeerType.FRAME) { + fsa = new FullScreenAdapter() { + @Override + public void windowExitingFullScreen(FullScreenEvent e) { + isInFullScreen = false; + } + + @Override + public void windowEnteringFullScreen(FullScreenEvent e) { + isInFullScreen = true; + } + }; + + FullScreenUtilities.addFullScreenListenerTo(target, fsa); + + if (IS(RESIZABLE, styleBits)) { + setCanFullscreen(true); + } + } } validateSurface(); @@ -431,6 +456,10 @@ @Override // PlatformWindow public void dispose() { + if (fsa != null) { + FullScreenUtilities.removeFullScreenListenerFrom(target, fsa); + fsa = null; + } contentView.dispose(); nativeDispose(getNSWindowPtr()); CPlatformWindow.super.dispose(); @@ -679,9 +708,25 @@ updateFocusabilityForAutoRequestFocus(true); } + private void setCanFullscreen(final boolean canFullScreen) { + if (target instanceof RootPaneContainer + && getPeer().getPeerType() == PeerType.FRAME) { + + if (isInFullScreen && !canFullScreen) { + toggleFullScreen(); + } + + final RootPaneContainer rpc = (RootPaneContainer) target; + rpc.getRootPane().putClientProperty( + CPlatformWindow.WINDOW_FULLSCREENABLE, canFullScreen); + } + } + @Override public void setResizable(final boolean resizable) { + setCanFullscreen(resizable); setStyleBits(RESIZABLE, resizable); + setStyleBits(ZOOMABLE, resizable); } @Override