--- a/jdk/src/share/classes/java/awt/Toolkit.java Mon Apr 07 00:31:06 2014 +0200
+++ b/jdk/src/share/classes/java/awt/Toolkit.java Thu Apr 24 21:09:05 2014 +0400
@@ -2568,23 +2568,30 @@
public void firePropertyChange(final PropertyChangeEvent evt) {
Object oldValue = evt.getOldValue();
Object newValue = evt.getNewValue();
+ String propertyName = evt.getPropertyName();
if (oldValue != null && newValue != null && oldValue.equals(newValue)) {
return;
}
+ Runnable updater = new Runnable() {
+ public void run() {
+ PropertyChangeSupport pcs = (PropertyChangeSupport)
+ AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
+ if (null != pcs) {
+ pcs.firePropertyChange(evt);
+ }
+ }
+ };
+ final AppContext currentAppContext = AppContext.getAppContext();
for (AppContext appContext : AppContext.getAppContexts()) {
if (null == appContext || appContext.isDisposed()) {
continue;
}
- final PeerEvent e = new PeerEvent(source,
- () -> {
- PropertyChangeSupport pcs = (PropertyChangeSupport)
- AppContext.getAppContext().get(PROP_CHANGE_SUPPORT_KEY);
- if (null != pcs) {
- pcs.firePropertyChange(evt);
- }
- },
- PeerEvent.ULTIMATE_PRIORITY_EVENT);
- SunToolkit.postEvent(appContext, e);
+ if (currentAppContext == appContext) {
+ updater.run();
+ } else {
+ final PeerEvent e = new PeerEvent(source, updater, PeerEvent.ULTIMATE_PRIORITY_EVENT);
+ SunToolkit.postEvent(appContext, e);
+ }
}
}
}
--- a/jdk/src/windows/classes/sun/awt/windows/WToolkit.java Mon Apr 07 00:31:06 2014 +0200
+++ b/jdk/src/windows/classes/sun/awt/windows/WToolkit.java Thu Apr 24 21:09:05 2014 +0400
@@ -38,6 +38,7 @@
import java.security.PrivilegedAction;
import sun.awt.AWTAutoShutdown;
import sun.awt.AWTPermissions;
+import sun.awt.AppContext;
import sun.awt.LightweightFrame;
import sun.awt.SunToolkit;
import sun.awt.util.ThreadGroupUtils;
@@ -930,7 +931,13 @@
* Windows doesn't always send WM_SETTINGCHANGE when it should.
*/
private void windowsSettingChange() {
- updateProperties();
+ if (AppContext.getAppContext() == null) {
+ // No AppContext, so we can update properties on the current thread,
+ // DesktopPropertyChangeSupport will only post events.
+ updateProperties();
+ } else {
+ EventQueue.invokeLater(this::updateProperties);
+ }
}
private synchronized void updateProperties() {