src/macosx/classes/sun/lwawt/macosx/CPlatformEmbeddedFrame.java
Print this page
@@ -31,29 +31,36 @@
import sun.java2d.opengl.CGLLayer;
import sun.java2d.SurfaceData;
import sun.awt.CGraphicsConfig;
import sun.awt.CGraphicsDevice;
+import sun.awt.CausedFocusEvent;
import java.awt.*;
import java.awt.BufferCapabilities.FlipContents;
+import sun.util.logging.PlatformLogger;
+
/*
* Provides a lightweight implementation of the EmbeddedFrame.
*/
public class CPlatformEmbeddedFrame implements PlatformWindow {
+ private static final PlatformLogger focusLogger = PlatformLogger.getLogger("sun.lwawt.macosx.focus.CPlatformEmbeddedFrame");
+
private CGLLayer windowLayer;
private LWWindowPeer peer;
+ private CEmbeddedFrame target;
private volatile int screenX = 0;
private volatile int screenY = 0;
@Override // PlatformWindow
public void initialize(Window target, final LWWindowPeer peer, PlatformWindow owner) {
this.peer = peer;
this.windowLayer = new CGLLayer(peer);
+ this.target = (CEmbeddedFrame)target;
}
@Override
public LWWindowPeer getPeer() {
return peer;
@@ -147,10 +154,22 @@
@Override
public void updateFocusableWindowState() {}
@Override
+ public boolean rejectFocusRequest(CausedFocusEvent.Cause cause) {
+ // Cross-app activation requests are not allowed.
+ if (cause != CausedFocusEvent.Cause.MOUSE_EVENT &&
+ !target.isParentWindowActive())
+ {
+ focusLogger.fine("the embedder is inactive, so the request is rejected");
+ return true;
+ }
+ return false;
+ }
+
+ @Override
public boolean requestWindowFocus() {
return true;
}
@Override