src/windows/classes/sun/awt/windows/ThemeReader.java

Print this page

        

*** 58,83 **** // writing with writeLock private static final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private static final Lock readLock = readWriteLock.readLock(); private static final Lock writeLock = readWriteLock.writeLock(); static void flush() { ! writeLock.lock(); ! try { ! // Close old themes. ! for (Long value : widgetToTheme.values()) { ! closeTheme(value.longValue()); ! } ! widgetToTheme.clear(); ! } finally { ! writeLock.unlock(); ! } } public static native boolean isThemed(); // this should be called only with writeLock held private static Long getThemeImpl(String widget) { Long theme = widgetToTheme.get(widget); if (theme == null) { int i = widget.indexOf("::"); --- 58,83 ---- // writing with writeLock private static final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(); private static final Lock readLock = readWriteLock.readLock(); private static final Lock writeLock = readWriteLock.writeLock(); + private static volatile boolean valid = false; + + static volatile boolean xpStyleEnabled; static void flush() { ! // Could be called on Toolkit thread, so do not try to acquire locks ! // to avoid deadlock with theme initialization ! valid = false; } public static native boolean isThemed(); + public static boolean isXPStyleEnabled() { + return xpStyleEnabled; + } + // this should be called only with writeLock held private static Long getThemeImpl(String widget) { Long theme = widgetToTheme.get(widget); if (theme == null) { int i = widget.indexOf("::");
*** 96,105 **** --- 96,123 ---- } // returns theme value // this method should be invoked with readLock locked private static Long getTheme(String widget) { + if (!valid) { + readLock.unlock(); + writeLock.lock(); + try { + if (!valid) { + // Close old themes. + for (Long value : widgetToTheme.values()) { + closeTheme(value); + } + widgetToTheme.clear(); + valid = true; + } + } finally { + readLock.lock(); + writeLock.unlock(); + } + } + // mostly copied from the javadoc for ReentrantReadWriteLock Long theme = widgetToTheme.get(widget); if (theme == null) { readLock.unlock(); writeLock.lock();