On Sun, 19 Feb 2023 09:35:53 GMT, SWinxy <d...@openjdk.org> wrote:

>> Many `installDefaults` methods set the font, foreground, and background on 
>> objects but their inverse methods `uninstallDefaults` do not remove them. 
>> I've added an inverse method to remove the colors and font to call for the 
>> `uninstallDefaults` methods that install defaults.
>> 
>> `AquaButtonUI` can call its super since it would otherwise be repeated code. 
>> `BasicComboBoxUI` (weirdly) installs the properties again when it should be 
>> uninstalling them, so I changed.
>> 
>> I noticed that, in a few subclasses, only one of calls to the super of 
>> `installDefaults` and `uninstallDefaults` are made. That is, an overridden 
>> `installDefaults` may call its super while the overridden 
>> `uninstallDefaults` does not call its super (or vise versa). These classes 
>> are: `AquaTabbedPaneUI`, `SynthMenuItemUI`, `SynthSplitPaneUI`, and 
>> `XTextAreaPeer`.
>> 
>> Sorry I couldn't write a test; I wasn't sure how I should have accessed the 
>> protected variable aside from creating extending classes for each class that 
>> changed.
>> 
>> See also #6603, where this issue was discovered.
>
> SWinxy has updated the pull request with a new target base due to a merge or 
> a rebase. The incremental webrev excludes the unrelated changes brought in by 
> the merge/rebase. The pull request contains five additional commits since the 
> last revision:
> 
>  - BasicPanelUI uninstalling font causes cascading problems
>  - Merge branch 'master' into 8278620
>  - Sync with CSR
>    
>    Only difference is that I added an Oxford comma
>  - Accidental imports added
>  - 8278620: properties installed by javax.swing.LookAndFeel installColors and 
> installColorsAndFont are not uninstalled
>    
>    Many installDefaults methods set the font, foreground, and background on 
> objects but their inverse methods uninstallDefaults do not remove them. I've 
> added an inverse method to remove the colors and font to call for the 
> uninstallDefaults methods that install defaults.
>    
>    AquaButtonUI can call its super since it would otherwise be repeated code. 
> BasicComboBoxUI (weirdly) installs the properties again when it should be 
> uninstalling them, so I changed.
>    
>    I noticed that, in a few subclasses, only one of calls to the super of 
> installDefaults and uninstallDefaults are made. That is, an overridden 
> installDefaults may call its super while the overridden uninstallDefaults 
> does not call its super (or vise versa). These classes are: AquaTabbedPaneUI, 
> SynthMenuItemUI, SynthSplitPaneUI, and XTextAreaPeer.

Found 👏 the 👏 problem! Removing the font from the JPanel causes a cascade of 
other components not getting the correct font objects when the component tree 
is updated. That is, the second time the font is installed, it is somehow 
different. In `BasicPanelUI#uninstallDefaults`, I've replaced 
`uninstallColorsAndFont` with `uninstallColors` for now. I've tested the two 
tests that Alexey said fail, and they both work again.
The components that don't receive the correct font are `JLabel`, `JButton`, 
`JMenuItem`, `JList`, `JComboBox`, `JToolTip`, and `JSpinner`. Figuring out 
what is causing *that* is not for almost-5AM-me. 🫠

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

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

Reply via email to