Mercurial > hg > icedtea9-forest > jdk
changeset 5552:1d75ff45586e
7145827: [macosx] JCK failure in b11: FocusableWindow3
Summary: forward posrt from 7u4
Reviewed-by: art
author | ant |
---|---|
date | Thu, 17 May 2012 22:21:27 +0400 |
parents | 5976b5848554 |
children | 2eca75e0a063 |
files | src/macosx/classes/sun/lwawt/LWWindowPeer.java |
diffstat | 1 files changed, 15 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macosx/classes/sun/lwawt/LWWindowPeer.java Thu May 17 22:10:40 2012 +0400 +++ b/src/macosx/classes/sun/lwawt/LWWindowPeer.java Thu May 17 22:21:27 2012 +0400 @@ -101,8 +101,6 @@ // events between MOUSE_PRESSED and MOUSE_RELEASED for particular button private static int mouseClickButtons = 0; - private volatile boolean cachedFocusableWindow; - private volatile boolean isOpaque = true; private static final Font DEFAULT_FONT = new Font("Lucida Grande", Font.PLAIN, 13); @@ -172,8 +170,6 @@ setAlwaysOnTop(getTarget().isAlwaysOnTop()); updateMinimumSize(); - cachedFocusableWindow = getTarget().isFocusableWindow(); - setOpacity(getTarget().getOpacity()); setOpaque(getTarget().isOpaque()); @@ -402,7 +398,6 @@ @Override public void updateFocusableWindowState() { - cachedFocusableWindow = getTarget().isFocusableWindow(); platformWindow.updateFocusableWindowState(); } @@ -1130,7 +1125,19 @@ private boolean focusAllowedFor() { Window window = getTarget(); // TODO: check if modal blocked - return window.isVisible() && window.isEnabled() && window.isFocusableWindow(); + return window.isVisible() && window.isEnabled() && isFocusableWindow(); + } + + private boolean isFocusableWindow() { + boolean focusable = getTarget().isFocusableWindow(); + if (isSimpleWindow()) { + LWWindowPeer ownerPeer = getOwnerFrameDialog(this); + if (ownerPeer == null) { + return false; + } + return focusable && ownerPeer.getTarget().isFocusableWindow(); + } + return focusable; } public boolean isSimpleWindow() { @@ -1150,8 +1157,8 @@ skipNextFocusChange = false; return; } - - if (!cachedFocusableWindow) { + if (!isFocusableWindow() && becomesFocused) { + focusLog.fine("the window is not focusable"); return; } if (becomesFocused) {