src/share/classes/com/sun/java/swing/plaf/windows/DesktopProperty.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2001, 2009, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -98,20 +98,27 @@
 
     /**
      * Updates the UIs of all the known Frames.
      */
     private static void updateAllUIs() {
+        invalidateStyle();
+        Frame appFrames[] = Frame.getFrames();
+        for (Frame appFrame : appFrames) {
+            updateWindowUI(appFrame);
+        }
+    }
+
+    /**
+     * Invalidates the current style in WindowsLookAndFeel.
+     */
+    private static void invalidateStyle() {
         // Check if the current UI is WindowsLookAndfeel and flush the XP style map.
         // Note: Change the package test if this class is moved to a different package.
         Class uiClass = UIManager.getLookAndFeel().getClass();
         if (uiClass.getPackage().equals(DesktopProperty.class.getPackage())) {
             XPStyle.invalidateStyle();
         }
-        Frame appFrames[] = Frame.getFrames();
-        for (Frame appFrame : appFrames) {
-            updateWindowUI(appFrame);
-        }
     }
 
     /**
      * Updates the UI of the passed in window and all its children.
      */

@@ -205,10 +212,12 @@
      * many desktop properties will change at once.
      */
     protected void updateUI() {
         if (!isUpdatePending()) {
             setUpdatePending(true);
+            // JDK-8039383: invalidate the cached style as soon as possible
+            invalidateStyle();
             Runnable uiUpdater = new Runnable() {
                 public void run() {
                     updateAllUIs();
                     setUpdatePending(false);
                 }