On Thu, 29 Dec 2022 06:22:01 GMT, Prasanta Sadhukhan <psadhuk...@openjdk.org> wrote:
>> Spec for >> [MetalLookAndFeel](https://github.com/openjdk/jdk/blob/master/src/java.desktop/share/classes/javax/swing/plaf/metal/MetalLookAndFeel.java#L247) >> says: >> "...MetalLookAndFeel registers an entry for each of the classes >> in the package javax.swing.plaf.metal that are named MetalXXXUI. >> The string XXX is one of Swing's uiClassIDs. For the uiClassIDs >> that do not have a class in metal, the corresponding class in >> javax.swing.plaf.basic is used. For example, metal does not >> have a class named "MetalColorChooserUI", as such, >> javax.swing.plaf.basic.BasicColorChooserUI is used". >> >> There is class MetalMenuBarUI, but the method populates given defaults table >> with the value >> "javax.swing.plaf.basic.BasicMenuBarUI". >> >> Added entry for MetalMenuBarUI.. >> CI tests including JCK tests are ok. > > Prasanta Sadhukhan has updated the pull request incrementally with one > additional commit since the last revision: > > Spec update > We need to clarify here what we want before the CSR can be completed. One > comment in the draft CSR got my attention - > > "MetalMenuBarUI entry is not registered in this method although is is part of > javax.swing.plaf.metal since it is registered in OceanTheme class, which is > used by MetalLookAndFeel by default." > > Hmm .. so now I'm wondering if we are phrasing things correctly. If themes > register the UIs they use why does this method do _anything_ ? Or is there > some _assumption_ that all themes use MOST of them and so they are always > registerr but some UIs are registered only by themes that use them ? You tell > me what actually happens and I can help you word it. The UIs are registered per L&F (and populated in `UIDefaults table` when user calls `UIManager.setLookAndFeel`) so we have `"ButtonUI", javax.swing.plaf.*** + uiClassID"` to find out the exact uiClassID, which implements that particular widget for that particular L&F, which in this case is `javax.swing.plaf.basic.BasicButtonUI`/`javax.swing.plaf.metal.MetalButtonUI` etc However, Metal L&F has different themes and some uiClass are specific to particular themes so it seems they are further segregated and registered in specific theme's UIDefaults table (via `currentTheme.addCustomEntriesToTable(table)` in MetalLookAndFeel class) for ex, MetalMenuBarUI only for OceanTheme (and therefore are not registered upfront in L&F class) which we are trying to establish here... ------------- PR: https://git.openjdk.org/jdk/pull/11646