src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java

Print this page

        

*** 200,209 **** --- 200,211 ---- private Window target; private LWWindowPeer peer; private CPlatformView contentView; private CPlatformWindow owner; + private boolean undecorated; // initialized in getInitialStyleBits() + private Rectangle normalBounds = null; // not-null only for undecorated maximized windows public CPlatformWindow(final PeerType peerType) { super(0, true); assert (peerType == PeerType.SIMPLEWINDOW || peerType == PeerType.DIALOG || peerType == PeerType.FRAME); }
*** 275,286 **** styleBits = SET(styleBits, MINIMIZABLE, false); } // Either java.awt.Frame or java.awt.Dialog can be undecorated, however java.awt.Window always is undecorated. { ! final boolean undecorated = isFrame ? ((Frame)target).isUndecorated() : (isDialog ? ((Dialog)target).isUndecorated() : true); ! if (undecorated) styleBits = SET(styleBits, DECORATED, false); } // Either java.awt.Frame or java.awt.Dialog can be resizable, however java.awt.Window is never resizable { final boolean resizable = isFrame ? ((Frame)target).isResizable() : (isDialog ? ((Dialog)target).isResizable() : false); --- 277,288 ---- styleBits = SET(styleBits, MINIMIZABLE, false); } // Either java.awt.Frame or java.awt.Dialog can be undecorated, however java.awt.Window always is undecorated. { ! this.undecorated = isFrame ? ((Frame)target).isUndecorated() : (isDialog ? ((Dialog)target).isUndecorated() : true); ! if (this.undecorated) styleBits = SET(styleBits, DECORATED, false); } // Either java.awt.Frame or java.awt.Dialog can be resizable, however java.awt.Window is never resizable { final boolean resizable = isFrame ? ((Frame)target).isResizable() : (isDialog ? ((Dialog)target).isResizable() : false);
*** 464,473 **** --- 466,499 ---- public void setBounds(int x, int y, int w, int h) { // assert CThreading.assertEventQueue(); nativeSetNSWindowBounds(getNSWindowPtr(), x, y, w, h); } + private void zoom() { + if (!undecorated) { + CWrapper.NSWindow.zoom(getNSWindowPtr()); + } else { + // OS X handles -zoom incorrectly for undecorated windows + final boolean isZoomed = this.normalBounds == null; + deliverZoom(isZoomed); + + Rectangle toBounds; + if (isZoomed) { + this.normalBounds = peer.getBounds(); + long screen = CWrapper.NSWindow.screen(getNSWindowPtr()); + toBounds = CWrapper.NSScreen.visibleFrame(screen).getBounds(); + // Flip the y coordinate + Rectangle frame = CWrapper.NSScreen.frame(screen).getBounds(); + toBounds.y = frame.height - toBounds.y - toBounds.height; + } else { + toBounds = normalBounds; + this.normalBounds = null; + } + setBounds(toBounds.x, toBounds.y, toBounds.width, toBounds.height); + } + } + @Override // PlatformWindow public void setVisible(boolean visible) { final long nsWindowPtr = getNSWindowPtr(); if (owner != null) {
*** 484,494 **** switch (peer.getState()) { case Frame.ICONIFIED: CWrapper.NSWindow.deminiaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! CWrapper.NSWindow.zoom(nsWindowPtr); break; } } LWWindowPeer blocker = peer.getBlocker(); --- 510,520 ---- switch (peer.getState()) { case Frame.ICONIFIED: CWrapper.NSWindow.deminiaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! zoom(); break; } } LWWindowPeer blocker = peer.getBlocker();
*** 524,534 **** switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! CWrapper.NSWindow.zoom(nsWindowPtr); break; } } } --- 550,560 ---- switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! zoom(); break; } } }
*** 690,716 **** switch (windowState) { case Frame.ICONIFIED: if (prevWindowState == Frame.MAXIMIZED_BOTH) { // let's return into the normal states first // the zoom call toggles between the normal and the max states ! CWrapper.NSWindow.zoom(nsWindowPtr); } CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: if (prevWindowState == Frame.ICONIFIED) { // let's return into the normal states first CWrapper.NSWindow.deminiaturize(nsWindowPtr); } ! CWrapper.NSWindow.zoom(nsWindowPtr); break; case Frame.NORMAL: if (prevWindowState == Frame.ICONIFIED) { CWrapper.NSWindow.deminiaturize(nsWindowPtr); } else if (prevWindowState == Frame.MAXIMIZED_BOTH) { // the zoom call toggles between the normal and the max states ! CWrapper.NSWindow.zoom(nsWindowPtr); } break; default: throw new RuntimeException("Unknown window state: " + windowState); } --- 716,742 ---- switch (windowState) { case Frame.ICONIFIED: if (prevWindowState == Frame.MAXIMIZED_BOTH) { // let's return into the normal states first // the zoom call toggles between the normal and the max states ! zoom(); } CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: if (prevWindowState == Frame.ICONIFIED) { // let's return into the normal states first CWrapper.NSWindow.deminiaturize(nsWindowPtr); } ! zoom(); break; case Frame.NORMAL: if (prevWindowState == Frame.ICONIFIED) { CWrapper.NSWindow.deminiaturize(nsWindowPtr); } else if (prevWindowState == Frame.MAXIMIZED_BOTH) { // the zoom call toggles between the normal and the max states ! zoom(); } break; default: throw new RuntimeException("Unknown window state: " + windowState); }