8042465: Applet menus not rendering when browser is full screen on Mac
Reviewed-by: anthony, pchelko
--- a/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Fri May 30 13:16:51 2014 +0400
+++ b/jdk/src/macosx/classes/sun/lwawt/macosx/CPlatformWindow.java Mon Jun 02 14:20:02 2014 +0400
@@ -119,6 +119,7 @@
static final int NONACTIVATING = 1 << 24;
static final int IS_DIALOG = 1 << 25;
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;
@@ -318,6 +319,7 @@
styleBits = SET(styleBits, TEXTURED, false);
// Popups in applets don't activate applet's process
styleBits = SET(styleBits, NONACTIVATING, true);
+ styleBits = SET(styleBits, IS_POPUP, true);
}
if (Window.Type.UTILITY.equals(target.getType())) {
--- a/jdk/src/macosx/native/sun/awt/AWTWindow.m Fri May 30 13:16:51 2014 +0400
+++ b/jdk/src/macosx/native/sun/awt/AWTWindow.m Mon Jun 02 14:20:02 2014 +0400
@@ -1,5 +1,5 @@
/*
- * 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.
*
* This code is free software; you can redistribute it and/or modify it
@@ -252,6 +252,10 @@
self.ownerWindow = owner;
[self setPropertiesForStyleBits:styleBits mask:MASK(_METHOD_PROP_BITMASK)];
+ if (IS(self.styleBits, IS_POPUP)) {
+ [self.nsWindow setCollectionBehavior:(1 << 8) /*NSWindowCollectionBehaviorFullScreenAuxiliary*/];
+ }
+
return self;
}
--- a/jdk/src/share/classes/javax/swing/PopupFactory.java Fri May 30 13:16:51 2014 +0400
+++ b/jdk/src/share/classes/javax/swing/PopupFactory.java Mon Jun 02 14:20:02 2014 +0400
@@ -25,10 +25,14 @@
package javax.swing;
+import sun.awt.EmbeddedFrame;
+import sun.awt.OSInfo;
+
import java.applet.Applet;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.security.AccessController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -226,7 +230,12 @@
case MEDIUM_WEIGHT_POPUP:
return getMediumWeightPopup(owner, contents, ownerX, ownerY);
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;
}
@@ -294,6 +303,8 @@
private static final Object heavyWeightPopupCacheKey =
new StringBuffer("PopupFactory.heavyWeightPopupCache");
+ private volatile boolean isCacheEnabled = true;
+
/**
* Returns either a new or recycled <code>Popup</code> containing
* the specified children.
@@ -448,12 +459,23 @@
}
}
+ /**
+ * Enables or disables cache for current object.
+ */
+ void setCacheEnabled(boolean enable) {
+ isCacheEnabled = enable;
+ }
+
//
// Popup methods
//
public void hide() {
super.hide();
- recycleHeavyWeightPopup(this);
+ if (isCacheEnabled) {
+ recycleHeavyWeightPopup(this);
+ } else {
+ this._dispose();
+ }
}
/**