# HG changeset patch # User serb # Date 1573773209 28800 # Node ID b5cdba232fcaf77d02ef06a6b18dcfd3518d948e # Parent 9db62a0927257183651991e171f674d008b13302 8232433: [macos 10.15] java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java may fail Reviewed-by: prr diff -r 9db62a092725 -r b5cdba232fca src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m --- a/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m Thu Nov 14 10:59:45 2019 +0530 +++ b/src/java.desktop/macosx/native/libawt_lwawt/awt/AWTWindow.m Thu Nov 14 15:13:29 2019 -0800 @@ -1237,6 +1237,15 @@ // ensure we repaint the whole window after the resize operation // (this will also re-enable screen updates, which were disabled above) // TODO: send PaintEvent + + // the macOS may ignore our "setFrame" request, in this, case the + // windowDidMove() will not come and we need to manually resync the + // "java.awt.Window" and NSWindow locations, because "java.awt.Window" + // already uses location ignored by the macOS. + // see sun.lwawt.LWWindowPeer#notifyReshape() + if (!NSEqualRects(rect, [nsWindow frame])) { + [window _deliverMoveResizeEvent]; + } }]; JNF_COCOA_EXIT(env); diff -r 9db62a092725 -r b5cdba232fca test/jdk/java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java --- a/test/jdk/java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java Thu Nov 14 10:59:45 2019 +0530 +++ b/test/jdk/java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java Thu Nov 14 15:13:29 2019 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 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 @@ -21,6 +21,7 @@ * questions. */ +import java.awt.AWTException; import java.awt.Frame; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; @@ -31,15 +32,21 @@ /** * @test * @key headful - * @bug 8201364 + * @bug 8201364 8232433 * @summary Component.getLocation() should returns correct location if * Component.setBounds() was ignored by the OS */ public final class LocationAtScreenCorner { public static void main(final String[] args) throws Exception { + test(true); + test(false); + } + + private static void test(final boolean undecorated) throws AWTException { Robot robot = new Robot(); Frame frame = new Frame(); + frame.setUndecorated(undecorated); frame.setSize(200, 200); frame.setLocationRelativeTo(null); frame.setVisible(true);