# HG changeset patch # User mhalder # Date 1547663192 -19800 # Node ID 659b004b6a1bd8c31e766cbdf328d8f8473fd4d7 # Parent c52a37f403240a809adc2ef5202d58184ce29968 8215280: Double click on titlebar not working for Frame with extended state set to MAXIMIZED_BOTH Reviewed-by: serb, kaddepalli diff -r c52a37f40324 -r 659b004b6a1b src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java --- a/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Tue Jan 15 16:41:17 2019 -0800 +++ b/src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Wed Jan 16 23:56:32 2019 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -295,8 +295,6 @@ private Rectangle normalBounds = null; // not-null only for undecorated maximized windows private CPlatformResponder responder; private long lastBecomeMainTime; // this is necessary to preserve right siblings order - private boolean maximizedBothState = false; - private boolean frameResizibilityChanged = false; public CPlatformWindow() { super(0, true); @@ -399,7 +397,7 @@ // Either java.awt.Frame or java.awt.Dialog can be resizable, however java.awt.Window is never resizable { - final boolean resizable = isTargetResizable(); + final boolean resizable = isFrame ? ((Frame)target).isResizable() : (isDialog ? ((Dialog)target).isResizable() : false); styleBits = SET(styleBits, RESIZABLE, resizable); if (!resizable) { styleBits = SET(styleBits, ZOOMABLE, false); @@ -611,8 +609,6 @@ setBounds(maximizedBounds.x, maximizedBounds.y, maximizedBounds.width, maximizedBounds.height); } - setFrameResizibilityChanged(true); - updateResizableAndMaximizeState(true); } private void unmaximize() { @@ -709,9 +705,11 @@ // Manage the extended state when showing if (visible) { /* Frame or Dialog should be set property WINDOW_FULLSCREENABLE to true if the - Frame resizable and Frame state is not MAXIMIZED_BOTH or Dialog is resizable. + Frame or Dialog is resizable. **/ - if (isTargetResizable()) { + final boolean resizable = (target instanceof Frame) ? ((Frame)target).isResizable() : + ((target instanceof Dialog) ? ((Dialog)target).isResizable() : false); + if (resizable) { setCanFullscreen(true); } @@ -727,11 +725,6 @@ frameState = Frame.ICONIFIED; } - if (isFrameResizibilityChanged()) { - updateResizableAndMaximizeState(false); - setFrameResizibilityChanged(false); - } - switch (frameState) { case Frame.ICONIFIED: execute(CWrapper.NSWindow::miniaturize); @@ -851,10 +844,9 @@ @Override public void setResizable(final boolean resizable) { - boolean windowResizable = resizable && !isMaximizedBoth(); - setCanFullscreen(windowResizable); - setStyleBits(RESIZABLE, windowResizable); - setStyleBits(ZOOMABLE, windowResizable); + setCanFullscreen(resizable); + setStyleBits(RESIZABLE, resizable); + setStyleBits(ZOOMABLE, resizable); } @Override @@ -963,11 +955,6 @@ windowState = Frame.ICONIFIED; } - if (isFrameResizibilityChanged()) { - updateResizableAndMaximizeState(false); - setFrameResizibilityChanged(false); - } - switch (windowState) { case Frame.ICONIFIED: if (prevWindowState == Frame.MAXIMIZED_BOTH) { @@ -1171,21 +1158,6 @@ } /* - * Resizibility of frame with state MAXIMIZED_BOTH is set to true to zoom - * the frame on double click on title bar and set to false later. This is - * required as frame won't zoom if resizibility of frame is false. - */ - private void deliverDoubleClickOnTitlebar() { - if ((peer != null) && (target instanceof Frame)) { - if (isMaximizedBoth()) { - updateResizableAndMaximizeState(false); - execute(CWrapper.NSWindow::zoom); - updateResizableAndMaximizeState(true); - } - } - } - - /* * Our focus model is synthetic and only non-simple window * may become natively focusable window. */ @@ -1350,33 +1322,6 @@ } return false; } - - private boolean isTargetResizable() { - if (target instanceof Frame) { - return ((Frame)target).isResizable() && !isMaximizedBoth(); - } else if (target instanceof Dialog) { - return ((Dialog)target).isResizable(); - } - return false; - } - - private void updateResizableAndMaximizeState(boolean maximizeState) { - maximizedBothState = maximizeState; - setResizable(!maximizeState); - } - - private boolean isMaximizedBoth() { - return maximizedBothState; - } - - private void setFrameResizibilityChanged(boolean resize) { - frameResizibilityChanged = resize; - } - - private boolean isFrameResizibilityChanged() { - return frameResizibilityChanged; - } - // ---------------------------------------------------------------------- // NATIVE CALLBACKS // ---------------------------------------------------------------------- diff -r c52a37f40324 -r 659b004b6a1b src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m Tue Jan 15 16:41:17 2019 -0800 +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m Wed Jan 16 23:56:32 2019 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -965,11 +965,6 @@ // Currently, no need to deliver the whole NSEvent. static JNF_MEMBER_CACHE(jm_deliverNCMouseDown, jc_CPlatformWindow, "deliverNCMouseDown", "()V"); JNFCallVoidMethod(env, platformWindow, jm_deliverNCMouseDown); - // Deliver double click on title bar - if ([event clickCount] > 1) { - static JNF_MEMBER_CACHE(jm_deliverDoubleClickOnTitlebar, jc_CPlatformWindow, "deliverDoubleClickOnTitlebar", "()V"); - JNFCallVoidMethod(env, platformWindow, jm_deliverDoubleClickOnTitlebar); - } (*env)->DeleteLocalRef(env, platformWindow); } } diff -r c52a37f40324 -r 659b004b6a1b test/jdk/java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java --- a/test/jdk/java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java Tue Jan 15 16:41:17 2019 -0800 +++ b/test/jdk/java/awt/Frame/UnfocusableMaximizedFrameResizablity/UnfocusableMaximizedFrameResizablity.java Wed Jan 16 23:56:32 2019 +0530 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ /* @test @key headful - @bug 4980161 7158623 8204860 8208125 + @bug 4980161 7158623 8204860 8208125 8215280 @summary Setting focusable window state to false makes the maximized frame resizable @compile UnfocusableMaximizedFrameResizablity.java @run main UnfocusableMaximizedFrameResizablity @@ -47,8 +47,15 @@ private static void createAndShowFrame() throws Exception { + //MAXIMIZED_BOTH frame is resizable on Mac OS by default. Nothing to test. + if (System.getProperty("os.name").toLowerCase().startsWith("mac")) { + cleanup(); + return; + } + //The MAXIMIZED_BOTH state is not supported by the toolkit. Nothing to test. if (!Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH)) { + cleanup(); return; } @@ -93,7 +100,9 @@ } private static void cleanup() { - frame.dispose(); + if (frame != null) { + frame.dispose(); + } isProgInterruption = true; mainThread.interrupt(); }