< prev index next >
src/java.desktop/windows/classes/sun/awt/windows/WDesktopProperties.java
Print this page
@@ -239,21 +239,32 @@
* Called by WToolkit when Windows settings change-- we (re)load properties and
* set new values.
*/
@SuppressWarnings("unchecked")
synchronized Map<String, Object> getProperties() {
- ThemeReader.flush();
+ Map<String, Object> prev = map==null?null:new HashMap<>(map);
// load the changed properties into a new hashmap
map = new HashMap<String, Object>();
getWindowsParameters();
map.put(SunToolkit.DESKTOPFONTHINTS, SunToolkit.getDesktopFontHints());
map.put(PROP_NAMES, getKeyNames());
// DnD uses one value for x and y drag diff, but Windows provides
// separate ones. For now, just use the x value - rnk
map.put("DnD.Autoscroll.cursorHysteresis", map.get("win.drag.x"));
+ // if ThemeReader.flush() always called on windowSettingChange,
+ // for some reason many windowSettingChange event would be generated on
+ // window resize, and it would decrease rendering performance while
+ // resizing a window. so only flush the ThemeReader if there are changed
+ // properties.
+ if(prev == null ||
+ !prev.keySet().equals(map.keySet()) ||
+ !Arrays.deepEquals(prev.values().toArray(), map.values().toArray())) {
+ ThemeReader.flush();
+ }
+
return (Map<String, Object>) map.clone();
}
/*
* This returns the value for the desktop property "awt.font.desktophints"
< prev index next >