8058193: [macosx] Potential incomplete fix for JDK-8031485

Reviewed-by: alexsch, serb
This commit is contained in:
Petr Pchelko 2014-11-19 16:42:19 +04:00
parent 0e4eb0dc8f
commit 4fda3e56f4
2 changed files with 22 additions and 10 deletions

View File

@ -496,10 +496,15 @@ public class AquaComboBoxUI extends BasicComboBoxUI implements Sizeable {
// This is somewhat messy. The difference here from BasicComboBoxUI.EnterAction is that
// arrow up or down does not automatically select the
@SuppressWarnings("serial") // anonymous class
private static final Action triggerSelectionAction = new AbstractAction() {
private final Action triggerSelectionAction = new AbstractAction() {
public void actionPerformed(final ActionEvent e) {
triggerSelectionEvent((JComboBox)e.getSource(), e);
}
@Override
public boolean isEnabled() {
return comboBox.isPopupVisible() && super.isEnabled();
}
};
@SuppressWarnings("serial") // anonymous class

View File

@ -27,18 +27,24 @@ import java.awt.event.KeyEvent;
/*
@test
@bug 8031485
@bug 8031485 8058193
@summary Combo box consuming escape and enter key events
@author Petr Pchelko
@library ../../../../lib/testlibrary/
@build ExtendedRobot
@run main ConsumedEscTest
@run main ConsumedKeyTest
*/
public class ConsumedEscTest {
public class ConsumedKeyTest {
private static volatile JFrame frame;
private static volatile boolean passed = false;
private static volatile boolean passed;
public static void main(String... args) throws Exception {
test(KeyEvent.VK_ESCAPE);
test(KeyEvent.VK_ENTER);
}
private static void test(final int key) throws Exception {
passed = false;
try {
SwingUtilities.invokeAndWait(() -> {
frame = new JFrame();
@ -47,27 +53,28 @@ public class ConsumedEscTest {
panel.add(combo);
combo.requestFocusInWindow();
frame.setBounds(100, 150, 300, 100);
addAction(panel);
addAction(panel, key);
frame.add(panel);
frame.setVisible(true);
});
ExtendedRobot robot = new ExtendedRobot();
robot.waitForIdle();
robot.type(KeyEvent.VK_ESCAPE);
robot.type(key);
robot.waitForIdle();
if (!passed) {
throw new RuntimeException("FAILED: ESC was consumed by combo box");
throw new RuntimeException("FAILED: " + KeyEvent.getKeyText(key) + " was consumed by combo box");
}
} finally {
if (frame != null) {
frame.dispose();
}
}
}
private static void addAction(JComponent comp) {
KeyStroke k = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
private static void addAction(JComponent comp, final int key) {
KeyStroke k = KeyStroke.getKeyStroke(key, 0);
Object actionKey = "cancel";
comp.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(k, actionKey);
Action cancelAction = new AbstractAction() {