On Fri, 25 Sep 2026 02:46:09 GMT, Prasanta Sadhukhan <[email protected]> wrote:
>> In Aqua L&F, JOptionPane.showInternalMessageDialog does not close after >> clicking the close icon button but other buttons like "OK" , "Cancel" works. >> It seems `AquaInternalFrameBorder.doButtonAction()` which handles >> `kCloseButton `was not called. >> It is seen that `showInternalMessageDialog()` uses a modal JInternalFrame. >> While that internal frame is modal, AWT filters mouse events so only the >> modal frame’s contents/children can receive them. Aqua paints and handles >> the red close button as part of the JInternalFrame border/title-bar itself >> via >> AquaInternalFrameBorder. drawAllWidgets -> paintButton -> getWidget >> (Widget.TITLE_BAR_CLOSE_BOX) >> https://github.com/openjdk/jdk/blob/5b2d6991a1279d375f9a3c00c7bcd0bbcc7081d6/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameBorder.java#L393 >> >> When close button is presssed, the flow should be >> https://github.com/openjdk/jdk/blob/5b2d6991a1279d375f9a3c00c7bcd0bbcc7081d6/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameUI.java#L528 >> [records the button hit which delegates to the border] >> https://github.com/openjdk/jdk/blob/5b2d6991a1279d375f9a3c00c7bcd0bbcc7081d6/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameUI.java#L536 >> >> https://github.com/openjdk/jdk/blob/5b2d6991a1279d375f9a3c00c7bcd0bbcc7081d6/src/java.desktop/macosx/classes/com/apple/laf/AquaInternalFrameBorder.java#L265 >> >> but it never gets called since >> the click target was the modal JInternalFrame itself, not a child component, >> so the modal filter consumed the event before Aqua code ever saw it, >> >> The fix is to allow events targeted at the modal component itself too >> >> It works for other L&F like Windows because they use Swing JButton for close >> button component in the internal frame title pane. so the click target is a >> child of the modal JInternalFrame, so the filter check is passed. >> There doesn't seem to be a way to fix in macosx classes because Aqua never >> receives the blocked event. The event is consumed earlier in shared AWT >> lightweight-modal dispatch code so the fix is made there >> CI testing is ok and no regression observed. >> >> --------- >> - [x] I confirm that I make this contribution in accordance with the >> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). > > Prasanta Sadhukhan has updated the pull request incrementally with one > additional commit since the last revision: > > Update comment LGTM ------------- Marked as reviewed by kizune (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/32169#pullrequestreview-5359722243
