On Fri, 21 Jun 2024 07:55:24 GMT, Abhishek Kumar <[email protected]> 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