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

Print this page

        

*** 201,210 **** --- 201,212 ---- 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); }
*** 279,290 **** 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); --- 281,292 ---- 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);
*** 466,475 **** --- 468,501 ---- 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) {
*** 486,496 **** switch (peer.getState()) { case Frame.ICONIFIED: CWrapper.NSWindow.deminiaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! CWrapper.NSWindow.zoom(nsWindowPtr); break; } } LWWindowPeer blocker = peer.getBlocker(); --- 512,522 ---- switch (peer.getState()) { case Frame.ICONIFIED: CWrapper.NSWindow.deminiaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! zoom(); break; } } LWWindowPeer blocker = peer.getBlocker();
*** 519,529 **** switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! CWrapper.NSWindow.zoom(nsWindowPtr); break; } } } --- 545,555 ---- switch (((Frame)target).getExtendedState()) { case Frame.ICONIFIED: CWrapper.NSWindow.miniaturize(nsWindowPtr); break; case Frame.MAXIMIZED_BOTH: ! zoom(); break; } } }
*** 680,706 **** 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); } --- 706,732 ---- 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); }