RFR: 8155030: The Menu Mnemonics are always displayed for GTK LAF [v14]

Alexey Ivanov aivanov at openjdk.org
Fri Jul 5 18:14:35 UTC 2024


On Fri, 5 Jul 2024 10:54:19 GMT, Alexey Ivanov <aivanov at openjdk.org> wrote:

> > > This changeset enables hiding / showing mnemonics on JMenuBar only. Do you plan to update ButtonUI and LabelUI for GTK Look-and-Feel too?
> > 
> > 
> > Not as a part of this PR. It can be taken up as other bug.
> 
> Does it make sense to handle mnemonics in buttons and labels as a separate bug? I doesn't seem worth it.
> 
> You've done 98% of the job in this PR. Refactoring touched all the classes which hide mnemonics.
> 
> The only thing left is to add handling into `SynthButtonUI` and `SynthLabelUI` where you need to replace `b.getDisplayedMnemonicIndex()` and `label.getDisplayedMnemonicIndex()` with a conditional display based on `MnemonicHandler.isMnemonicHidden()`.

I still think it is better to include mnemonics for buttons and labels in this PR. It could be done easily by the following diff:


diff --git a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java
index befa65d095e..514bfe400a5 100644
--- a/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java
+++ b/src/java.desktop/share/classes/javax/swing/plaf/synth/SynthGraphicsUtils.java
@@ -361,7 +361,9 @@ public void paintText(SynthContext ss, Graphics g, String text,
             FontMetrics fm = SwingUtilities2.getFontMetrics(c, g);
             y += fm.getAscent();
             SwingUtilities2.drawStringUnderlineCharAt(c, g, text,
-                                                      mnemonicIndex, x, y);
+                                                      MnemonicHandler.isMnemonicHidden()
+                                                      ? -1 : mnemonicIndex,
+                                                      x, y);
         }
     }



I [committed it as 7c70b20](https://github.com/aivanov-jdk/jdk/commit/7c70b20b7928fe21d262e7b229d37a6373876cee) on top of the latest version in this PR.

The diff modifies the generic `SynthGraphicsUtils.paintText` so that no mnemonic is passed to `SwingUtilities2.drawStringUnderlineCharAt` if `isMnemonicHidden` returns `true`.

This approach has *a performance impact* on all UI text painting. The condition can be moved into `GTKGraphicsUtils` so that only GTK L&F will call `isMnemonicHidden`.

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

PR Comment: https://git.openjdk.org/jdk/pull/18992#issuecomment-2211244902


More information about the client-libs-dev mailing list