On Thu, 27 Jun 2024 17:17:12 GMT, Alexey Ivanov <aiva...@openjdk.org> wrote:

> I think we're moving in the right direction.
> 
> My idea was to extract the common functionality as the methods 
> `setMnemonicHidden`, `isMnemonicHidden` and `repaintMnemonicsInWindow`, 
> `repaintMnemonicsInContainer` into a helper class.
> 
> `AltProcessor`… Your version for GTK and the version in Aqua look the same to 
> me. I think it makes sense to create a common `AltProcessor` class which 
> would be used by GTK and Aqua.
> 
> The Windows version is different, so it'll stay this way… It doesn't look 
> worth trying to fit that version into a shared class.

Common `ALtProcessor` class implemented for GTK and Aqua and `MnemonicHandler` 
class simplified to keep only helper methods.

> src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java
>  line 1469:
> 
>> 1467:     /**
>> 1468:      * Called by UIManager when this look and feel is uninstalled.
>> 1469:      */
> 
> Does it repeat the javadoc of the super class? Likely it does, use 
> `{@inheritDoc}` instead.

Updated.

> src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/GTKLookAndFeel.java
>  line 1470:
> 
>> 1468:      * Called by UIManager when this look and feel is uninstalled.
>> 1469:      */
>> 1470:     @Override
> 
> You may want to add the `@Override` annotation to `initialize` method too… 
> for consistency.

Ok.. updated.

> src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java 
> line 672:
> 
>> 670:                 int mnemIndex = 
>> lh.getMenuItem().getDisplayedMnemonicIndex();
>> 671:                 // Check to see if the Mnemonic should be rendered in 
>> GTK.
>> 672:                 if (mnemIndex >= 0 && 
>> MnemonicHandler.isMnemonicHidden()) {
> 
> Is 0 a valid mnemonic? Probably not.

0 is a valid mnemonic.

> src/java.desktop/share/classes/sun/swing/MnemonicHandler.java line 41:
> 
>> 39: 
>> 40: public class MnemonicHandler {
>> 41:     public static final AltProcessor altProcessor = new AltProcessor();
> 
> I'd like to see `AltProcessor` here but it's different for Windows. Thus, 
> `AltProcessor` should be local to `*RootUI` as it is now.
> 
> If `AltProcessor` in GTK and Aqua are similar or the same, it makes sense to 
> extract them into a common helper class.

New class added for GTK and Aqua.

> src/java.desktop/share/classes/sun/swing/MnemonicHandler.java line 131:
> 
>> 129:                 c.repaint();
>> 130:                 continue;
>> 131:             } else if (c instanceof Container) {
> 
> `continue` is redundant if you chain `if` block with `else if`.
> 
> If you remove `continue` from the first `if` block, it becomes empty, which 
> isn't good. I suggest moving the first block into its own `if` statement:
> 
> 
> if (c == null || !c.isVisible()) {
>     continue;
> }
> 
> if (/* other conditions */) {
> 
> 
> You can use pattern matching to avoid explicit cast. Are we planning to 
> backporting this change to JDK 11? If not, I'd go for pattern matching:
> 
> 
> if (c instanceof AbstractButton b && b.getMnemonic() != '\0') {
>     c.repaint();
> }
> 
> 
> Likely, the condition can be simplified further: the button and the label 
> cases have the same body, and thus the two conditions can be combined into 
> one condition.

Updated.

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

PR Comment: https://git.openjdk.org/jdk/pull/18992#issuecomment-2196608935
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1658496209
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1658496399
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1658496093
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1658496843
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1658497151

Reply via email to