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