6827786: Mnemonic cycling for multiple equal mnemonic armed menu items stops when encountering a submenu
Reviewed-by: alexp
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuUI.java Wed Sep 09 17:32:18 2009 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicMenuUI.java Thu Sep 10 12:30:55 2009 +0400
@@ -196,10 +196,6 @@
return getHandler();
}
- protected MenuKeyListener createMenuKeyListener(JComponent c) {
- return (MenuKeyListener)getHandler();
- }
-
public Dimension getMaximumSize(JComponent c) {
if (((JMenu)menuItem).isTopLevelMenu() == true) {
Dimension d = c.getPreferredSize();
@@ -401,8 +397,7 @@
public void stateChanged(ChangeEvent e) { }
}
- private class Handler extends BasicMenuItemUI.Handler implements
- MenuKeyListener {
+ private class Handler extends BasicMenuItemUI.Handler {
//
// PropertyChangeListener
//
@@ -585,45 +580,5 @@
}
public void menuDragMouseExited(MenuDragMouseEvent e) {}
public void menuDragMouseReleased(MenuDragMouseEvent e) {}
-
-
- //
- // MenuKeyListener
- //
- /**
- * Open the Menu
- */
- public void menuKeyTyped(MenuKeyEvent e) {
- if (!crossMenuMnemonic && BasicPopupMenuUI.getLastPopup() != null) {
- // when crossMenuMnemonic is not set, we don't open a toplevel
- // menu if another toplevel menu is already open
- return;
- }
-
- char key = Character.toLowerCase((char)menuItem.getMnemonic());
- MenuElement path[] = e.getPath();
- MenuSelectionManager manager = e.getMenuSelectionManager();
- if (key == Character.toLowerCase(e.getKeyChar())) {
- JPopupMenu popupMenu = ((JMenu)menuItem).getPopupMenu();
- ArrayList<MenuElement> newList = new ArrayList<MenuElement>(Arrays.asList(path));
- newList.add(popupMenu);
- MenuElement subs[] = popupMenu.getSubElements();
- MenuElement sub =
- BasicPopupMenuUI.findEnabledChild(subs, -1, true);
- if(sub != null) {
- newList.add(sub);
- }
- MenuElement newPath[] = new MenuElement[0];
- newPath = newList.toArray(newPath);
- manager.setSelectedPath(newPath);
- e.consume();
- } else if (((JMenu)menuItem).isTopLevelMenu()
- && BasicPopupMenuUI.getLastPopup() == null) {
- manager.clearSelectedPath();
- }
- }
-
- public void menuKeyPressed(MenuKeyEvent e) {}
- public void menuKeyReleased(MenuKeyEvent e) {}
}
}
--- a/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java Wed Sep 09 17:32:18 2009 +0400
+++ b/jdk/src/share/classes/javax/swing/plaf/basic/BasicPopupMenuUI.java Thu Sep 10 12:30:55 2009 +0400
@@ -339,7 +339,7 @@
indexes[matches++] = j;
}
}
- if (item.isArmed()) {
+ if (item.isArmed() || item.isSelected()) {
currentIndex = matches - 1;
}
}