src/macosx/classes/sun/lwawt/LWWindowPeer.java
Print this page
*** 99,110 ****
// A bitmask that indicates what mouse buttons produce MOUSE_CLICKED events
// on MOUSE_RELEASE. Click events are only generated if there were no drag
// 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);
private static LWWindowPeer grabbingWindow;
--- 99,108 ----
*** 174,185 ****
}
setAlwaysOnTop(getTarget().isAlwaysOnTop());
updateMinimumSize();
- cachedFocusableWindow = getTarget().isFocusableWindow();
-
setOpacity(getTarget().getOpacity());
setOpaque(getTarget().isOpaque());
// Create surface data and back buffer
replaceSurfaceData(1, null);
--- 172,181 ----
*** 246,256 ****
if (isSimpleWindow()) {
LWKeyboardFocusManagerPeer manager = LWKeyboardFocusManagerPeer.
getInstance(getAppContext());
if (visible) {
- updateFocusableWindowState();
changeFocusedWindow(true, true);
// Focus the owner in case this window is focused.
} else if (manager.getCurrentFocusedWindow() == getTarget()) {
LWWindowPeer owner = getOwnerFrameDialog(LWWindowPeer.this);
--- 242,251 ----
*** 401,411 ****
platformWindow.setAlwaysOnTop(value);
}
@Override
public void updateFocusableWindowState() {
- cachedFocusableWindow = getTarget().isFocusableWindow();
platformWindow.updateFocusableWindowState();
}
@Override
public void setModalBlocked(Dialog blocker, boolean blocked) {
--- 396,405 ----
*** 1118,1128 ****
}
private boolean focusAllowedFor() {
Window window = getTarget();
// TODO: check if modal blocked
! return window.isVisible() && window.isEnabled() && window.isFocusableWindow();
}
public boolean isSimpleWindow() {
Window window = getTarget();
return !(window instanceof Dialog || window instanceof Frame);
--- 1112,1134 ----
}
private boolean focusAllowedFor() {
Window window = getTarget();
// TODO: check if modal blocked
! 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() {
Window window = getTarget();
return !(window instanceof Dialog || window instanceof Frame);
*** 1138,1149 ****
if (isShowing && !getTarget().isAutoRequestFocus() || skipNextFocusChange) {
focusLog.fine("skipping focus change");
skipNextFocusChange = false;
return;
}
!
! if (!cachedFocusableWindow) {
return;
}
if (becomesFocused) {
synchronized (getPeerTreeLock()) {
if (blocker != null) {
--- 1144,1155 ----
if (isShowing && !getTarget().isAutoRequestFocus() || skipNextFocusChange) {
focusLog.fine("skipping focus change");
skipNextFocusChange = false;
return;
}
! if (!isFocusableWindow() && becomesFocused) {
! focusLog.fine("the window is not focusable");
return;
}
if (becomesFocused) {
synchronized (getPeerTreeLock()) {
if (blocker != null) {