< 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 >