On Fri, 21 Jun 2024 07:55:24 GMT, Abhishek Kumar <abhis...@openjdk.org> wrote:

>> In GTK LAF, the menu mnemonics are always displayed which is different from 
>> the native behavior. In native application **(tested with gedit for normal 
>> buttons and tested with libreoffice for menu**), the menu mnemonics toggle 
>> on press of `ALT` key. Menu mnemonics are hidden initially and then toggles 
>> between show/hide on `ALT` press. 
>> Proposed fix is to handle the `ALT` key press for GTK LAF and mimic the 
>> native behavior. Fix is similar to the `ALT` key processing in  Windows LAF. 
>> Automated test case is added to verify the fix and tested in Ubuntu and 
>> Oracle linux.
>> 
>> CI testing is green and link attached in JBS.
>
> Abhishek Kumar has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Remove access modifier from method declaration

Changes requested by aivanov (Reviewer).

src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java 
line 751:

> 749:      * Repaints all the components with the mnemonics in the given 
> window and all its owned windows.
> 750:      */
> 751:     static void repaintMnemonicsInWindow(final Window w) {

The `repaintMnemonicsInWindow` and `repaintMnemonicsInContainer` are exactly 
the same as methods in `WindowsGraphicsUtils`. And `AquaMnemonicHandler` has 
yet another copy of the same code.

Is it possible to move these methods to a utility class that's available for 
all Look-and-Feels to avoid duplicating code?

src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java 
line 779:

> 777:                 c.repaint();
> 778:                 continue;
> 779:             } else if (c instanceof Container){

You said you were handling menu mnemonics only, yet this is more than menus. 
However, this would make the UI look consistent.

src/java.desktop/share/classes/javax/swing/plaf/synth/SynthLookAndFeel.java 
line 1053:

> 1051:      * This method is a non operation if the underlying operating system
> 1052:      * does not support the mnemonic hiding feature.
> 1053:      */

You can still write proper javadocs for members with any visibility, and IDE 
will show you the description of a method or a field when you hover over its 
usage anywhere in the code.

You already wrote the javadoc, leave them.

A regular comment won't be shown this way.

src/java.desktop/share/classes/javax/swing/plaf/synth/SynthRootPaneUI.java line 
45:

> 43:     private SynthStyle style;
> 44:     static final AltProcessor altProcessor = new AltProcessor();
> 45:     static boolean altProcessorInstalledFlag;

Wouldn't it be easier to install `altProcessor` always in 
`SynthLookAndFeel.initialize` and to uninstall it in 
`SynthLookAndFeel.uninitialize` like it's done in `WindowsLookAndFeel`:

https://github.com/openjdk/jdk/blob/master/src/java.desktop/windows/classes/com/sun/java/swing/plaf/windows/WindowsLookAndFeel.java#L197-L198

Then `altProcessor` would do nothing if the `RootPane.altPress` property isn't 
set or is `false`.

Requesting the value of `RootPane.altPress` from `UIManager` each time 
`postProcessKeyEvent` is called is inefficient, so you can store the value in 
`altProcessor` when look and feel is installed.

If `RootPane.altPress` can be changed dynamically, you can install a 
`PropertyChangeListener` to `UIManager`.

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

PR Review: https://git.openjdk.org/jdk/pull/18992#pullrequestreview-2133329175
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1649390460
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1649377154
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1649372792
PR Review Comment: https://git.openjdk.org/jdk/pull/18992#discussion_r1649386106

Reply via email to