From 18b4b6bd0ec6379f3d8e01b8defe0cec080c1e8c Mon Sep 17 00:00:00 2001 From: dmarkov Date: Fri, 17 Aug 2018 15:53:41 +0100 Subject: [PATCH] 8205479: OS X: requestFocus() does not work properly for embedded frame Reviewed-by: serb, aivanov --- .../classes/sun/lwawt/macosx/CEmbeddedFrame.java | 16 ++++++++++++++-- .../sun/lwawt/macosx/CPlatformEmbeddedFrame.java | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java index 11f05b5bc..61479f6eb 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java +++ b/src/macosx/classes/sun/lwawt/macosx/CEmbeddedFrame.java @@ -159,8 +159,6 @@ public class CEmbeddedFrame extends EmbeddedFrame { : this; } } - // ignore focus "lost" native request as it may mistakenly - // deactivate active window (see 8001161) if (globalFocusedWindow == this) { responder.handleWindowFocusEvent(parentWindowActive, null); } @@ -175,4 +173,18 @@ public class CEmbeddedFrame extends EmbeddedFrame { // another window. return globalFocusedWindow != null ? !globalFocusedWindow.isParentWindowActive() : true; } + + public void synthesizeWindowActivation(boolean doActivate) { + if (isParentWindowActive() != doActivate) { + handleWindowFocusEvent(doActivate); + } + } + + public static void updateGlobalFocusedWindow(CEmbeddedFrame newGlobalFocusedWindow) { + synchronized (classLock) { + if (newGlobalFocusedWindow.isParentWindowActive()) { + globalFocusedWindow = newGlobalFocusedWindow; + } + } + } } diff --git a/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java b/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java index ee5d7884b..2fbc31e32 100644 --- a/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java +++ b/src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java @@ -146,6 +146,8 @@ public class CPlatformEmbeddedFrame implements PlatformWindow { @Override public boolean requestWindowFocus() { + CEmbeddedFrame.updateGlobalFocusedWindow(target); + target.synthesizeWindowActivation(true); return true; } -- GitLab