提交 7fa8a671 编写于 作者: D dmarkov

8042465: Applet menus not rendering when browser is full screen on Mac

Reviewed-by: anthony, pchelko
上级 34bae17f
...@@ -119,6 +119,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo ...@@ -119,6 +119,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
static final int NONACTIVATING = 1 << 24; static final int NONACTIVATING = 1 << 24;
static final int IS_DIALOG = 1 << 25; static final int IS_DIALOG = 1 << 25;
static final int IS_MODAL = 1 << 26; static final int IS_MODAL = 1 << 26;
static final int IS_POPUP = 1 << 27;
static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE; static final int _STYLE_PROP_BITMASK = DECORATED | TEXTURED | UNIFIED | UTILITY | HUD | SHEET | CLOSEABLE | MINIMIZABLE | RESIZABLE;
...@@ -318,6 +319,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo ...@@ -318,6 +319,7 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
styleBits = SET(styleBits, TEXTURED, false); styleBits = SET(styleBits, TEXTURED, false);
// Popups in applets don't activate applet's process // Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true); styleBits = SET(styleBits, NONACTIVATING, true);
styleBits = SET(styleBits, IS_POPUP, true);
} }
if (Window.Type.UTILITY.equals(target.getType())) { if (Window.Type.UTILITY.equals(target.getType())) {
......
/* /*
* Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -252,6 +252,10 @@ AWT_ASSERT_APPKIT_THREAD; ...@@ -252,6 +252,10 @@ AWT_ASSERT_APPKIT_THREAD;
self.ownerWindow = owner; self.ownerWindow = owner;
[self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)]; [self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
if (IS(self.styleBits, IS_POPUP)) {
[self.nsWindow setCollectionBehavior:(1 << 8) /*NSWindowCollectionBehaviorFullScreenAuxiliary*/];
}
return self; return self;
} }
......
...@@ -25,10 +25,14 @@ ...@@ -25,10 +25,14 @@
package javax.swing; package javax.swing;
import sun.awt.EmbeddedFrame;
import sun.awt.OSInfo;
import java.applet.Applet; import java.applet.Applet;
import java.awt.*; import java.awt.*;
import java.awt.event.WindowAdapter; import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.security.AccessController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -226,7 +230,12 @@ public class PopupFactory { ...@@ -226,7 +230,12 @@ public class PopupFactory {
case MEDIUM_WEIGHT_POPUP: case MEDIUM_WEIGHT_POPUP:
return getMediumWeightPopup(owner, contents, ownerX, ownerY); return getMediumWeightPopup(owner, contents, ownerX, ownerY);
case HEAVY_WEIGHT_POPUP: case HEAVY_WEIGHT_POPUP:
return getHeavyWeightPopup(owner, contents, ownerX, ownerY); Popup popup = getHeavyWeightPopup(owner, contents, ownerX, ownerY);
if ((AccessController.doPrivileged(OSInfo.getOSTypeAction()) ==
OSInfo.OSType.MACOSX) && (EmbeddedFrame.getAppletIfAncestorOf(owner) != null)) {
((HeavyWeightPopup)popup).setCacheEnabled(false);
}
return popup;
} }
return null; return null;
} }
...@@ -294,6 +303,8 @@ public class PopupFactory { ...@@ -294,6 +303,8 @@ public class PopupFactory {
private static final Object heavyWeightPopupCacheKey = private static final Object heavyWeightPopupCacheKey =
new StringBuffer("PopupFactory.heavyWeightPopupCache"); new StringBuffer("PopupFactory.heavyWeightPopupCache");
private volatile boolean isCacheEnabled = true;
/** /**
* Returns either a new or recycled <code>Popup</code> containing * Returns either a new or recycled <code>Popup</code> containing
* the specified children. * the specified children.
...@@ -448,12 +459,23 @@ public class PopupFactory { ...@@ -448,12 +459,23 @@ public class PopupFactory {
} }
} }
/**
* Enables or disables cache for current object.
*/
void setCacheEnabled(boolean enable) {
isCacheEnabled = enable;
}
// //
// Popup methods // Popup methods
// //
public void hide() { public void hide() {
super.hide(); super.hide();
if (isCacheEnabled) {
recycleHeavyWeightPopup(this); recycleHeavyWeightPopup(this);
} else {
this._dispose();
}
} }
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册