--- a/jdk/src/share/classes/java/awt/Component.java Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/share/classes/java/awt/Component.java Wed Sep 09 00:48:59 2009 -0700
@@ -6665,6 +6665,9 @@
Container parent = this.parent;
if (parent != null && parent.peer instanceof LightweightPeer) {
relocateComponent();
+ if (!isRecursivelyVisible()) {
+ peer.setVisible(false);
+ }
}
}
invalidate();
@@ -9572,6 +9575,13 @@
return comp.getPeer();
}
}
+ // traversing the hierarchy up to the closest HW container;
+ // further traversing may return a component that is not actually
+ // a native sibling of this component and this kind of z-order
+ // request may not be allowed by the underlying system (6852051).
+ if (!cont.isLightweight()) {
+ break;
+ }
indexAbove = cont.getSiblingIndexAbove();
cont = cont.getContainer();
--- a/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/XErrorHandler.java Wed Sep 09 00:48:59 2009 -0700
@@ -71,8 +71,8 @@
return super.handleError(display, err);
}
// Shared instance
- private static IgnoreBadWindowHandler theInstance = new IgnoreBadWindowHandler();
- public static IgnoreBadWindowHandler getInstance() {
+ private static VerifyChangePropertyHandler theInstance = new VerifyChangePropertyHandler();
+ public static VerifyChangePropertyHandler getInstance() {
return theInstance;
}
}
--- a/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/XKeysym.java Wed Sep 09 00:48:59 2009 -0700
@@ -354,6 +354,7 @@
keysym2UCSHash.put( (long)0xFFB7, (char)0x0037); // XK_KP_7 --> DIGIT SEVEN
keysym2UCSHash.put( (long)0xFFB8, (char)0x0038); // XK_KP_8 --> DIGIT EIGHT
keysym2UCSHash.put( (long)0xFFB9, (char)0x0039); // XK_KP_9 --> DIGIT NINE
+ keysym2UCSHash.put( (long)0xFE20, (char)0x0009); // XK_ISO_Left_Tab --> <control>
keysym2UCSHash.put( (long)0x1a1, (char)0x0104); // XK_Aogonek --> LATIN CAPITAL LETTER A WITH OGONEK
keysym2UCSHash.put( (long)0x1a2, (char)0x02d8); // XK_breve --> BREVE
keysym2UCSHash.put( (long)0x1a3, (char)0x0141); // XK_Lstroke --> LATIN CAPITAL LETTER L WITH STROKE
--- a/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/XToolkit.java Wed Sep 09 00:48:59 2009 -0700
@@ -166,6 +166,9 @@
}
public static void RESTORE_XERROR_HANDLER() {
+ // wait until all requests are processed by the X server
+ // and only then uninstall the error handler
+ XSync();
current_error_handler = null;
}
--- a/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/solaris/classes/sun/awt/X11/keysym2ucs.h Wed Sep 09 00:48:59 2009 -0700
@@ -649,7 +649,7 @@
0x0000 #define XK_ISO_Last_Group 0xFE0E
0x0000 #define XK_ISO_Last_Group_Lock 0xFE0F
-0x0000 #define XK_ISO_Left_Tab 0xFE20
+0x0009 #define XK_ISO_Left_Tab 0xFE20
0x0000 #define XK_ISO_Move_Line_Up 0xFE21
0x0000 #define XK_ISO_Move_Line_Down 0xFE22
0x0000 #define XK_ISO_Partial_Line_Up 0xFE23
--- a/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Dialog.cpp Wed Sep 09 00:48:59 2009 -0700
@@ -364,6 +364,7 @@
if (locationByPlatform) {
moveToDefaultLocation();
}
+ EnableTranslucency(TRUE);
if (IsFocusableWindow() && (IsAutoRequestFocus() || IsFocusedWindowModalBlocker())) {
::ShowWindow(GetHWnd(), SW_SHOW);
} else {
--- a/jdk/src/windows/native/sun/windows/awt_Frame.cpp Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Frame.cpp Wed Sep 09 00:48:59 2009 -0700
@@ -690,6 +690,8 @@
if (locationByPlatform) {
moveToDefaultLocation();
}
+ EnableTranslucency(TRUE);
+
BOOL autoRequestFocus = IsAutoRequestFocus();
if (m_iconic) {
--- a/jdk/src/windows/native/sun/windows/awt_Window.cpp Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Window.cpp Wed Sep 09 00:48:59 2009 -0700
@@ -218,12 +218,7 @@
if (warningString != NULL) {
delete [] warningString;
}
- ::EnterCriticalSection(&contentBitmapCS);
- if (hContentBitmap != NULL) {
- ::DeleteObject(hContentBitmap);
- hContentBitmap = NULL;
- }
- ::LeaveCriticalSection(&contentBitmapCS);
+ DeleteContentBitmap();
::DeleteCriticalSection(&contentBitmapCS);
}
@@ -372,6 +367,10 @@
}
}
+ if (wp->flags & SWP_HIDEWINDOW) {
+ EnableTranslucency(FALSE);
+ }
+
return mrDoDefault;
}
@@ -1130,6 +1129,8 @@
moveToDefaultLocation();
}
+ EnableTranslucency(TRUE);
+
// The following block exists to support Menu/Tooltip animation for
// Swing programs in a way which avoids introducing any new public api into
// AWT or Swing.
@@ -2494,27 +2495,73 @@
}
}
-void AwtWindow::SetTranslucency(BYTE opacity, BOOL opaque)
+// Deletes the hContentBitmap if it is non-null
+void AwtWindow::DeleteContentBitmap()
+{
+ ::EnterCriticalSection(&contentBitmapCS);
+ if (hContentBitmap != NULL) {
+ ::DeleteObject(hContentBitmap);
+ hContentBitmap = NULL;
+ }
+ ::LeaveCriticalSection(&contentBitmapCS);
+}
+
+// The effects are enabled only upon showing the window.
+// See 6780496 for details.
+void AwtWindow::EnableTranslucency(BOOL enable)
{
- BYTE old_opacity = getOpacity();
- BOOL old_opaque = isOpaque();
+ if (enable) {
+ SetTranslucency(getOpacity(), isOpaque(), FALSE, TRUE);
+ } else {
+ SetTranslucency(0xFF, TRUE, FALSE);
+ }
+}
+
+/**
+ * Sets the translucency effects.
+ *
+ * This method is used to:
+ *
+ * 1. Apply the translucency effects upon showing the window
+ * (setValues == FALSE, useDefaultForOldValues == TRUE);
+ * 2. Turn off the effects upon hiding the window
+ * (setValues == FALSE, useDefaultForOldValues == FALSE);
+ * 3. Set the effects per user's request
+ * (setValues == TRUE, useDefaultForOldValues == FALSE);
+ *
+ * In case #3 the effects may or may not be applied immediately depending on
+ * the current visibility status of the window.
+ *
+ * The setValues argument indicates if we need to preserve the passed values
+ * in local fields for further use.
+ * The useDefaultForOldValues argument indicates whether we should consider
+ * the window as if it has not any effects applied at the moment.
+ */
+void AwtWindow::SetTranslucency(BYTE opacity, BOOL opaque, BOOL setValues,
+ BOOL useDefaultForOldValues)
+{
+ BYTE old_opacity = useDefaultForOldValues ? 0xFF : getOpacity();
+ BOOL old_opaque = useDefaultForOldValues ? TRUE : isOpaque();
if (opacity == old_opacity && opaque == old_opaque) {
return;
}
- setOpacity(opacity);
- setOpaque(opaque);
+ if (setValues) {
+ m_opacity = opacity;
+ m_opaque = opaque;
+ }
+
+ // If we're invisible and are storing the values, return
+ // Otherwise, apply the effects immediately
+ if (!IsVisible() && setValues) {
+ return;
+ }
HWND hwnd = GetHWnd();
if (opaque != old_opaque) {
- ::EnterCriticalSection(&contentBitmapCS);
- if (hContentBitmap != NULL) {
- ::DeleteObject(hContentBitmap);
- hContentBitmap = NULL;
- }
- ::LeaveCriticalSection(&contentBitmapCS);
+ DeleteContentBitmap();
}
if (opaque && opacity == 0xff) {
@@ -2634,9 +2681,7 @@
}
::EnterCriticalSection(&contentBitmapCS);
- if (hContentBitmap != NULL) {
- ::DeleteObject(hContentBitmap);
- }
+ DeleteContentBitmap();
hContentBitmap = hBitmap;
contentWidth = width;
contentHeight = height;
--- a/jdk/src/windows/native/sun/windows/awt_Window.h Thu Sep 03 10:53:04 2009 -0700
+++ b/jdk/src/windows/native/sun/windows/awt_Window.h Wed Sep 09 00:48:59 2009 -0700
@@ -262,32 +262,29 @@
// from its hierarchy when shown. Currently applied to instances of
// javax/swing/Popup$HeavyWeightWindow class.
+ // SetTranslucency() is the setter for the following two fields
BYTE m_opacity; // The opacity level. == 0xff by default (when opacity mode is disabled)
BOOL m_opaque; // Whether the window uses the perpixel translucency (false), or not (true).
inline BYTE getOpacity() {
return m_opacity;
}
- inline void setOpacity(BYTE opacity) {
- m_opacity = opacity;
- }
inline BOOL isOpaque() {
return m_opaque;
}
- inline void setOpaque(BOOL opaque) {
- m_opaque = opaque;
- }
CRITICAL_SECTION contentBitmapCS;
HBITMAP hContentBitmap;
UINT contentWidth;
UINT contentHeight;
- void SetTranslucency(BYTE opacity, BOOL opaque);
+ void SetTranslucency(BYTE opacity, BOOL opaque, BOOL setValues = TRUE,
+ BOOL useDefaultForOldValues = FALSE);
void UpdateWindow(int width, int height, HBITMAP hBitmap);
void UpdateWindowImpl(int width, int height, HBITMAP hBitmap);
void RedrawWindow();
+ void DeleteContentBitmap();
static UINT untrustedWindowsCounter;
@@ -352,6 +349,8 @@
UINT currentWmSizeState;
+ void EnableTranslucency(BOOL enable);
+
private:
int m_screenNum;