7186371: [macosx] Main menu shortcuts not displayed (7u6 regression)
Reviewed-by: leonidr
diff --git a/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItem.java b/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItem.java
index 49e4997..6852ea0 100644
--- a/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItem.java
+++ b/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItem.java
@@ -34,7 +34,7 @@
import sun.lwawt.macosx.CMenuItem;
-class ScreenMenuItem extends MenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler {
+final class ScreenMenuItem extends MenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler {
ScreenMenuPropertyListener fListener;
JMenuItem fMenuItem;
@@ -96,21 +96,31 @@
fMenuItem.removeComponentListener(this);
}
- public void setAccelerator(final KeyStroke ks) {
- if (ks == null) {
- setShortcut(null);
+ static void syncLabelAndKS(MenuItem menuItem, String label, KeyStroke ks) {
+ final MenuComponentPeer peer = menuItem.getPeer();
+ if (!(peer instanceof CMenuItem)) {
+ //Is it possible?
return;
}
-
- final MenuComponentPeer peer = getPeer();
- if (peer instanceof CMenuItem) {
- final CMenuItem ourPeer = (CMenuItem)peer;
- ourPeer.setLabel(fMenuItem.getText(), ks.getKeyChar(), ks.getKeyCode(), ks.getModifiers());
+ final CMenuItem cmi = (CMenuItem) peer;
+ if (ks == null) {
+ cmi.setLabel(label);
} else {
- setShortcut(new MenuShortcut(ks.getKeyCode(), (ks.getModifiers() & InputEvent.SHIFT_MASK) != 0));
+ cmi.setLabel(label, ks.getKeyChar(), ks.getKeyCode(),
+ ks.getModifiers());
}
}
+ @Override
+ public synchronized void setLabel(final String label) {
+ syncLabelAndKS(this, label, fMenuItem.getAccelerator());
+ }
+
+ @Override
+ public void setAccelerator(final KeyStroke ks) {
+ syncLabelAndKS(this, fMenuItem.getText(), ks);
+ }
+
public void actionPerformed(final ActionEvent e) {
fMenuItem.doClick(0); // This takes care of all the different events
}
diff --git a/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java b/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java
index 15f314e..644eacc 100644
--- a/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java
+++ b/jdk/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java
@@ -36,7 +36,7 @@
import sun.lwawt.macosx.*;
-class ScreenMenuItemCheckbox extends CheckboxMenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler, ItemListener {
+final class ScreenMenuItemCheckbox extends CheckboxMenuItem implements ActionListener, ComponentListener, ScreenMenuPropertyHandler, ItemListener {
JMenuItem fMenuItem;
MenuContainer fParent;
@@ -110,19 +110,14 @@
super.removeNotify();
}
- public void setAccelerator(final KeyStroke ks) {
- if (ks == null) {
- setShortcut(null);
- return;
- }
+ @Override
+ public synchronized void setLabel(final String label) {
+ ScreenMenuItem.syncLabelAndKS(this, label, fMenuItem.getAccelerator());
+ }
- final MenuComponentPeer peer = getPeer();
- if (peer instanceof CMenuItem) {
- final CMenuItem ourPeer = (CMenuItem)peer;
- ourPeer.setLabel(fMenuItem.getText(), ks.getKeyChar(), ks.getKeyCode(), ks.getModifiers());
- } else {
- setShortcut(new MenuShortcut(ks.getKeyCode(), (ks.getModifiers() & InputEvent.SHIFT_MASK) != 0));
- }
+ @Override
+ public void setAccelerator(final KeyStroke ks) {
+ ScreenMenuItem.syncLabelAndKS(this, fMenuItem.getText(), ks);
}
public void actionPerformed(final ActionEvent e) {