JRE-612 [followup]
diff --git a/src/windows/classes/sun/awt/Win32GraphicsDevice.java b/src/windows/classes/sun/awt/Win32GraphicsDevice.java
index ec2d8c2..1e18cd4 100644
--- a/src/windows/classes/sun/awt/Win32GraphicsDevice.java
+++ b/src/windows/classes/sun/awt/Win32GraphicsDevice.java
@@ -524,8 +524,8 @@
defaultConfig = null;
configs = null;
// pass on to all top-level windows on this display
- topLevels.notifyListeners();
initScaleFactors();
+ topLevels.notifyListeners();
}
/**
diff --git a/src/windows/classes/sun/awt/windows/WFramePeer.java b/src/windows/classes/sun/awt/windows/WFramePeer.java
index 6140c2c..ecb9dec 100644
--- a/src/windows/classes/sun/awt/windows/WFramePeer.java
+++ b/src/windows/classes/sun/awt/windows/WFramePeer.java
@@ -111,6 +111,14 @@
}
@Override
+ public void displayChanged() {
+ super.displayChanged();
+ updateIcon();
+ }
+
+ private native void updateIcon();
+
+ @Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
boolean result = super.updateGraphicsData(gc);
Rectangle bounds = AWTAccessor.getFrameAccessor().
diff --git a/src/windows/native/sun/windows/awt_Frame.cpp b/src/windows/native/sun/windows/awt_Frame.cpp
index 8dca9a4..5ee0c48 100644
--- a/src/windows/native/sun/windows/awt_Frame.cpp
+++ b/src/windows/native/sun/windows/awt_Frame.cpp
@@ -1188,6 +1188,19 @@
}
}
+void _UpdateIcon(void* p) {
+ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
+
+ jobject self = reinterpret_cast<jobject>(p);
+ PDATA pData;
+ JNI_CHECK_PEER_GOTO(self, ret);
+
+ AwtFrame* frame = (AwtFrame*)pData;
+ frame->DoUpdateIcon();
+ret:
+ env->DeleteGlobalRef(self);
+}
+
void AwtFrame::DoUpdateIcon()
{
//Workaround windows bug:
@@ -1974,6 +1987,17 @@
CATCH_BAD_ALLOC;
}
+JNIEXPORT void JNICALL
+Java_sun_awt_windows_WFramePeer_updateIcon(JNIEnv *env, jobject self)
+{
+ TRY;
+
+ AwtToolkit::GetInstance().InvokeFunction(_UpdateIcon, env->NewGlobalRef(self));
+ // global ref is deleted in _UpdateIcon()
+
+ CATCH_BAD_ALLOC;
+}
+
} /* extern "C" */
static bool SetFocusToPluginControl(HWND hwndPlugin)
diff --git a/src/windows/native/sun/windows/awt_Window.cpp b/src/windows/native/sun/windows/awt_Window.cpp
index 4a542a6..21e5e56 100644
--- a/src/windows/native/sun/windows/awt_Window.cpp
+++ b/src/windows/native/sun/windows/awt_Window.cpp
@@ -1756,13 +1756,6 @@
return mrConsume;
}
-void _DoUpdateIcon(void *p)
-{
- DASSERT(p);
- AwtWindow* window = reinterpret_cast<AwtWindow*>(p);
- window->DoUpdateIcon();
-}
-
/*
* Override AwtComponent's move handling to first update the
* java AWT target's position fields directly, since Windows
@@ -1784,7 +1777,7 @@
m_screenNum = GetScreenImOn();
}
else if (CheckIfOnNewScreen()) {
- AwtToolkit::GetInstance().InvokeFunctionLater(_DoUpdateIcon, (void*)this);
+ DoUpdateIcon();
}
/* Update the java AWT target component's fields directly */