> 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 three 
additional commits since the last revision:

 - Remove close button and close menu from JOptionPane.JInternalFrame
 - Remove close button and close menu from JOptionPane.JInternalFrame
 - Remove close button and close menu from JOptionPane.JInternalFrame

-------------

Changes:
  - all: https://git.openjdk.org/jdk/pull/32169/files
  - new: https://git.openjdk.org/jdk/pull/32169/files/1af833fd..0c43f833

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=32169&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=32169&range=00-01

  Stats: 383 lines in 8 files changed: 147 ins; 228 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/32169.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/32169/head:pull/32169

PR: https://git.openjdk.org/jdk/pull/32169

Reply via email to