From 6b3de0a7364a36eb9d81735bb2e2943e484f155d Mon Sep 17 00:00:00 2001 From: rupashka Date: Fri, 8 Apr 2011 00:26:35 +0400 Subject: [PATCH] 6596966: Some JFileChooser mnemonics do not work with sticky keys Reviewed-by: alexp --- .../javax/swing/plaf/basic/BasicLabelUI.java | 6 +- .../swing/JLabel/6596966/bug6596966.java | 95 +++++++++++++++++++ 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 test/javax/swing/JLabel/6596966/bug6596966.java diff --git a/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java b/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java index c1370303d..c735fe812 100644 --- a/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java +++ b/src/share/classes/javax/swing/plaf/basic/BasicLabelUI.java @@ -455,6 +455,8 @@ public class BasicLabelUI extends LabelUI implements PropertyChangeListener } int dka = label.getDisplayedMnemonic(); inputMap.put(KeyStroke.getKeyStroke(dka, ActionEvent.ALT_MASK, true), RELEASE); + // Need this when the sticky keys are enabled + inputMap.put(KeyStroke.getKeyStroke(dka, 0, true), RELEASE); // Need this if ALT is released before the accelerator inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ALT, 0, true), RELEASE); label.requestFocus(); @@ -467,7 +469,9 @@ public class BasicLabelUI extends LabelUI implements PropertyChangeListener InputMap inputMap = SwingUtilities.getUIInputMap(label, JComponent.WHEN_FOCUSED); if (inputMap != null) { // inputMap should never be null. - inputMap.remove(KeyStroke.getKeyStroke(label.getDisplayedMnemonic(), ActionEvent.ALT_MASK, true)); + int dka = label.getDisplayedMnemonic(); + inputMap.remove(KeyStroke.getKeyStroke(dka, ActionEvent.ALT_MASK, true)); + inputMap.remove(KeyStroke.getKeyStroke(dka, 0, true)); inputMap.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ALT, 0, true)); } if (labelFor instanceof Container && diff --git a/test/javax/swing/JLabel/6596966/bug6596966.java b/test/javax/swing/JLabel/6596966/bug6596966.java new file mode 100644 index 000000000..5cf0110f7 --- /dev/null +++ b/test/javax/swing/JLabel/6596966/bug6596966.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +/* @test + @bug 6596966 + @summary Some JFileChooser mnemonics do not work with sticky keys + * @library ../../regtesthelpers + * @build Util + @run main bug6596966 + @author Pavel Porvatov +*/ + + +import javax.swing.*; +import java.awt.*; +import java.awt.event.KeyEvent; + +public class bug6596966 { + private static JFrame frame; + + private static JLabel label; + private static JButton button; + private static JComboBox comboBox; + + public static void main(String[] args) throws Exception { + Robot robot = new Robot(); + + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + button = new JButton("Button"); + comboBox = new JComboBox(); + + label = new JLabel("Label"); + label.setDisplayedMnemonic('L'); + label.setLabelFor(comboBox); + + JPanel pnContent = new JPanel(); + + pnContent.add(button); + pnContent.add(label); + pnContent.add(comboBox); + + frame = new JFrame(); + + frame.add(pnContent); + frame.pack(); + frame.setVisible(true); + } + }); + + Util.blockTillDisplayed(frame); + + robot.keyPress(KeyEvent.VK_ALT); + robot.keyPress(KeyEvent.VK_L); + + robot.waitForIdle(); + + Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(new KeyEvent(label, KeyEvent.KEY_RELEASED, + EventQueue.getMostRecentEventTime(), 0, KeyEvent.VK_L, 'L')); + + robot.waitForIdle(); + + try { + SwingUtilities.invokeAndWait(new Runnable() { + public void run() { + if (!comboBox.isFocusOwner()) { + throw new RuntimeException("comboBox isn't focus owner"); + } + } + }); + } finally { + robot.keyRelease(KeyEvent.VK_ALT); + } + } +} -- GitLab