On Mon, 12 Jun 2023 22:29:25 GMT, Alisen Chung <ach...@openjdk.org> wrote:
>> added displayChanged call to CPlatformWindow when frame first needs to >> deiconify or unmaximize >> All client tests passed after change > > Alisen Chung has updated the pull request incrementally with one additional > commit since the last revision: > > use realsync to flush native queue Changes requested by dmarkov (Reviewer). src/java.desktop/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java line 989: > 987: // the zoom call toggles between the normal and the > max states > 988: unmaximize(); > 989: peer.getLWToolkit().realSync(); Well.. `realSync()` works here but I am not sure if that invocation really fixes the issue or just hides it by introducing a delay. I believe we need some function which ensures that the frame is in correct (`NORMAL`) state right after `unmaximize()` call and before `execute(CWrapper.NSWindow::miniaturize)` invocation. Possible implementation of that method below: private void waitForWindowState(int state) { Object lock = new Object(); target.addWindowStateListener(new WindowStateListener() { public void windowStateChanged(WindowEvent e) { synchronized(lock) { if (e.getNewState() == state) { lock.notifyAll(); } } } }); if (peer.getState() != state) { synchronized(lock) { try { lock.wait(); } catch(InterruptedException ie) {} } } } So in code you will call `waitForWindowState(Frame.NORMAL)` instead of `realSync()` ------------- PR Review: https://git.openjdk.org/jdk/pull/14226#pullrequestreview-1477327791 PR Review Comment: https://git.openjdk.org/jdk/pull/14226#discussion_r1228226627