From 950c342e4fc28fcc5595eeaa69a4a7fdefe94e71 Mon Sep 17 00:00:00 2001 From: ant Date: Wed, 12 Jun 2013 16:18:04 +0400 Subject: [PATCH] 8015454: java/awt/Focus/TypeAhead/TestFocusFreeze.java hangs with jdk8 since b56 Reviewed-by: anthony --- .../java/awt/DefaultKeyboardFocusManager.java | 15 +++++++++++---- .../java/awt/Focus/TypeAhead/TestFocusFreeze.java | 1 + 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/share/classes/java/awt/DefaultKeyboardFocusManager.java b/src/share/classes/java/awt/DefaultKeyboardFocusManager.java index f41998819..7676f5b06 100644 --- a/src/share/classes/java/awt/DefaultKeyboardFocusManager.java +++ b/src/share/classes/java/awt/DefaultKeyboardFocusManager.java @@ -285,10 +285,17 @@ public class DefaultKeyboardFocusManager extends KeyboardFocusManager { TimedWindowEvent we = (TimedWindowEvent)e; long time = we.getWhen(); synchronized (this) { - for (KeyEvent ke: enqueuedKeyEvents) { - if (time >= ke.getWhen()) { - SunToolkit.postEvent(AppContext.getAppContext(), new SequencedEvent(e)); - return true; + KeyEvent ke = enqueuedKeyEvents.isEmpty() ? null : enqueuedKeyEvents.getFirst(); + if (ke != null && time >= ke.getWhen()) { + TypeAheadMarker marker = typeAheadMarkers.getFirst(); + if (marker != null) { + Window toplevel = marker.untilFocused.getContainingWindow(); + // Check that the component awaiting focus belongs to + // the current focused window. See 8015454. + if (toplevel != null && toplevel.isFocused()) { + SunToolkit.postEvent(AppContext.getAppContext(), new SequencedEvent(e)); + return true; + } } } } diff --git a/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java b/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java index a22551bec..2edcf9db9 100644 --- a/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java +++ b/test/java/awt/Focus/TypeAhead/TestFocusFreeze.java @@ -132,6 +132,7 @@ class TestKFM extends DefaultKeyboardFocusManager { } protected synchronized void enqueueKeyEvents(long after, Component untilFocused) { super.enqueueKeyEvents(after, untilFocused); + robot.delay(1); robot.keyPress(KeyEvent.VK_SPACE); robot.delay(50); robot.keyRelease(KeyEvent.VK_SPACE); -- GitLab