8046391: Hang displaying JFileChooser with Windows L&F

Reviewed-by: anthony, serb
This commit is contained in:
Alexey Ivanov 2014-06-11 10:53:27 +04:00
parent f06c5555b0
commit ec7589bf7d
18 changed files with 84 additions and 155 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2006, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2006, 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
@ -130,14 +130,11 @@ class AnimationController implements ActionListener, PropertyChangeListener {
//one second seems plausible value
duration = 1000;
} else {
XPStyle xp = XPStyle.getXP();
duration = (xp != null)
? xp.getThemeTransitionDuration(
c, part,
normalizeState(oldState),
normalizeState(newState),
Prop.TRANSITIONDURATIONS)
: 1000;
duration = XPStyle.getXP().getThemeTransitionDuration(
c, part,
normalizeState(oldState),
normalizeState(newState),
Prop.TRANSITIONDURATIONS);
}
controller.startAnimation(c, part, oldState, newState, duration);
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2013, 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
@ -37,7 +37,6 @@ import java.awt.*;
import static com.sun.java.swing.plaf.windows.TMSchema.Part;
import static com.sun.java.swing.plaf.windows.TMSchema.State;
import static com.sun.java.swing.plaf.windows.XPStyle.Skin;
import sun.swing.DefaultLookup;
import sun.swing.StringUIClientPropertyKey;
@ -232,9 +231,6 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
private void paintXPComboBoxBackground(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
if (xp == null) {
return;
}
State state = getXPComboBoxState(c);
Skin skin = null;
if (! comboBox.isEditable()
@ -404,9 +400,8 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
* @return a button which represents the popup control
*/
protected JButton createArrowButton() {
XPStyle xp = XPStyle.getXP();
if (xp != null) {
return new XPComboBoxButton(xp);
if (XPStyle.getXP() != null) {
return new XPComboBoxButton();
} else {
return super.createArrowButton();
}
@ -414,9 +409,9 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
@SuppressWarnings("serial") // Superclass is not serializable across versions
private class XPComboBoxButton extends XPStyle.GlyphButton {
public XPComboBoxButton(XPStyle xp) {
public XPComboBoxButton() {
super(null,
(! xp.isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
(! XPStyle.getXP().isSkinDefined(comboBox, Part.CP_DROPDOWNBUTTONRIGHT))
? Part.CP_DROPDOWNBUTTON
: (comboBox.getComponentOrientation() == ComponentOrientation.RIGHT_TO_LEFT)
? Part.CP_DROPDOWNBUTTONLEFT
@ -429,11 +424,10 @@ public class WindowsComboBoxUI extends BasicComboBoxUI {
protected State getState() {
State rv;
rv = super.getState();
XPStyle xp = XPStyle.getXP();
if (rv != State.DISABLED
&& comboBox != null && ! comboBox.isEditable()
&& xp != null && xp.isSkinDefined(comboBox,
Part.CP_DROPDOWNBUTTONRIGHT)) {
&& XPStyle.getXP().isSkinDefined(comboBox,
Part.CP_DROPDOWNBUTTONRIGHT)) {
/*
* for non editable ComboBoxes Vista seems to have the
* same glyph for all non DISABLED states

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2000, 2013, 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
@ -125,9 +125,6 @@ public class WindowsGraphicsUtils {
static void paintXPText(AbstractButton b, Part part, State state,
Graphics g, int x, int y, String text, int mnemIndex) {
XPStyle xp = XPStyle.getXP();
if (xp == null) {
return;
}
Color textColor = b.getForeground();
if (textColor instanceof UIResource) {

View File

@ -623,8 +623,8 @@ public class WindowsIconFactory implements Serializable
@SuppressWarnings("serial") // Same-version serialization only
private static class MenuArrowIcon implements Icon, UIResource, Serializable {
public void paintIcon(Component c, Graphics g, int x, int y) {
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
if (WindowsMenuItemUI.isVistaPainting()) {
XPStyle xp = XPStyle.getXP();
State state = State.NORMAL;
if (c instanceof JMenuItem) {
state = ((JMenuItem) c).getModel().isEnabled()
@ -657,18 +657,16 @@ public class WindowsIconFactory implements Serializable
}
}
public int getIconWidth() {
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
if (WindowsMenuItemUI.isVistaPainting()) {
Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
return skin.getWidth();
} else {
return 4;
}
}
public int getIconHeight() {
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
Skin skin = xp.getSkin(null, Part.MP_POPUPSUBMENU);
if (WindowsMenuItemUI.isVistaPainting()) {
Skin skin = XPStyle.getXP().getSkin(null, Part.MP_POPUPSUBMENU);
return skin.getHeight();
} else {
return 8;
@ -694,8 +692,7 @@ public class WindowsIconFactory implements Serializable
}
static int getIconWidth() {
XPStyle xp = XPStyle.getXP();
return ((xp != null) ? xp.getSkin(null, Part.MP_POPUPCHECK).getWidth() : 16)
return XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK).getWidth()
+ 2 * OFFSET;
}
@ -759,17 +756,12 @@ public class WindowsIconFactory implements Serializable
Icon icon = getIcon();
int height = 0;
if (icon != null) {
height = icon.getIconHeight();
height = icon.getIconHeight() + 2 * OFFSET;
} else {
XPStyle xp = XPStyle.getXP();
if (xp != null) {
Skin skin = xp.getSkin(null, Part.MP_POPUPCHECK);
height = skin.getHeight();
} else {
height = 16;
}
Skin skin =
XPStyle.getXP().getSkin(null, Part.MP_POPUPCHECK);
height = skin.getHeight() + 2 * OFFSET;
}
height += 2 * OFFSET;
return height;
}
@ -817,16 +809,14 @@ public class WindowsIconFactory implements Serializable
? State.BULLETDISABLED
: State.CHECKMARKDISABLED;
}
Skin skin;
XPStyle xp = XPStyle.getXP();
if (xp != null) {
Skin skin;
skin = xp.getSkin(c, backgroundPart);
skin.paintSkin(g, x, y,
getIconWidth(), getIconHeight(), backgroundState);
if (icon == null) {
skin = xp.getSkin(c, part);
skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
}
skin = xp.getSkin(c, backgroundPart);
skin.paintSkin(g, x, y,
getIconWidth(), getIconHeight(), backgroundState);
if (icon == null) {
skin = xp.getSkin(c, part);
skin.paintSkin(g, x + OFFSET, y + OFFSET, state);
}
}
}

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2001, 2013, 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
@ -86,15 +86,14 @@ public class WindowsInternalFrameTitlePane extends BasicInternalFrameTitlePane {
}
} else {
buttonWidth += 2;
selectedTitleGradientColor =
UIManager.getColor("InternalFrame.activeTitleGradient");
notSelectedTitleGradientColor =
UIManager.getColor("InternalFrame.inactiveTitleGradient");
Color activeBorderColor =
UIManager.getColor("InternalFrame.activeBorderColor");
setBorder(BorderFactory.createLineBorder(activeBorderColor, 1));
}
// JDK-8039383: initialize these colors because getXP() may return null when theme is changed
selectedTitleGradientColor =
UIManager.getColor("InternalFrame.activeTitleGradient");
notSelectedTitleGradientColor =
UIManager.getColor("InternalFrame.inactiveTitleGradient");
}
protected void uninstallListeners() {
@ -389,7 +388,7 @@ public class WindowsInternalFrameTitlePane extends BasicInternalFrameTitlePane {
public class WindowsTitlePaneLayout extends BasicInternalFrameTitlePane.TitlePaneLayout {
private Insets captionMargin = null;
private Insets contentMargin = null;
private final XPStyle xp = XPStyle.getXP();
private XPStyle xp = XPStyle.getXP();
WindowsTitlePaneLayout() {
if (xp != null) {

View File

@ -2327,9 +2327,8 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
}
public Object getXPValue(UIDefaults table) {
XPStyle xp = XPStyle.getXP();
Border xpBorder = xp != null ? xp.getBorder(null, (Part)xpValue) : null;
if (xpBorder != null && extraMargin != null) {
Border xpBorder = XPStyle.getXP().getBorder(null, (Part)xpValue);
if (extraMargin != null) {
return new BorderUIResource.
CompoundBorderUIResource(xpBorder, extraMargin);
} else {
@ -2345,8 +2344,7 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
public Object getXPValue(UIDefaults table) {
XPColorValueKey key = (XPColorValueKey)xpValue;
XPStyle xp = XPStyle.getXP();
return xp != null ? xp.getColor(key.skin, key.prop, null) : null;
return XPStyle.getXP().getColor(key.skin, key.prop, null);
}
private static class XPColorValueKey {

View File

@ -156,8 +156,8 @@ public class WindowsMenuBarUI extends BasicMenuBarUI
@Override
public void paint(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
if (WindowsMenuItemUI.isVistaPainting()) {
XPStyle xp = XPStyle.getXP();
Skin skin;
skin = xp.getSkin(c, Part.MP_BARBACKGROUND);
int width = c.getWidth();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2006, 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
@ -109,8 +109,7 @@ public class WindowsMenuItemUI extends BasicMenuItemUI {
static void paintBackground(WindowsMenuItemUIAccessor menuItemUI,
Graphics g, JMenuItem menuItem, Color bgColor) {
assert isVistaPainting();
XPStyle xp = XPStyle.getXP();
if (xp != null && isVistaPainting()) {
if (isVistaPainting()) {
int menuWidth = menuItem.getWidth();
int menuHeight = menuItem.getHeight();
if (menuItem.isOpaque()) {
@ -119,6 +118,7 @@ public class WindowsMenuItemUI extends BasicMenuItemUI {
g.fillRect(0,0, menuWidth, menuHeight);
g.setColor(oldColor);
}
XPStyle xp = XPStyle.getXP();
Part part = menuItemUI.getPart(menuItem);
Skin skin = xp.getSkin(menuItem, part);
skin.paintSkin(g, 0 , 0,

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2004, 2006, 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
@ -50,8 +50,7 @@ public class WindowsPopupMenuSeparatorUI extends BasicPopupMenuSeparatorUI {
public void paint(Graphics g, JComponent c) {
Dimension s = c.getSize();
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
if (WindowsMenuItemUI.isVistaPainting()) {
int x = 1;
Component parent = c.getParent();
if (parent instanceof JComponent) {
@ -68,7 +67,7 @@ public class WindowsPopupMenuSeparatorUI extends BasicPopupMenuSeparatorUI {
x += WindowsPopupMenuUI.getGutterWidth();
}
}
Skin skin = xp.getSkin(c, Part.MP_POPUPSEPARATOR);
Skin skin = XPStyle.getXP().getSkin(c, Part.MP_POPUPSEPARATOR);
int skinHeight = skin.getHeight();
int y = (s.height - skinHeight) / 2;
skin.paintSkin(g, x, y, s.width - x - 1, skinHeight, State.NORMAL);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2006, 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
@ -194,8 +194,8 @@ public class WindowsPopupMenuUI extends BasicPopupMenuUI {
@Override
public void paint(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
if (xp != null && WindowsMenuItemUI.isVistaPainting()) {
if (WindowsMenuItemUI.isVistaPainting()) {
XPStyle xp = XPStyle.getXP();
Skin skin = xp.getSkin(c, Part.MP_POPUPBACKGROUND);
skin.paintSkin(g, 0, 0, c.getWidth(),c.getHeight(), State.NORMAL);
int textOffset = getTextOffset(c);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2012, 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
@ -322,9 +322,8 @@ public class WindowsProgressBarUI extends BasicProgressBarUI
private Rectangle getFullChunkBounds(Rectangle box) {
boolean vertical = (progressBar.getOrientation() == JProgressBar.VERTICAL);
XPStyle xp = XPStyle.getXP();
int gap = (xp != null) ? xp.getInt(progressBar, Part.PP_PROGRESS,
null, Prop.PROGRESSSPACESIZE, 0)
: 0;
int gap = xp.getInt(progressBar, Part.PP_PROGRESS, null,
Prop.PROGRESSSPACESIZE, 0);
if (!vertical) {
int chunksize = box.width+gap;
@ -339,9 +338,6 @@ public class WindowsProgressBarUI extends BasicProgressBarUI
boolean vertical,
int bgwidth, int bgheight) {
XPStyle xp = XPStyle.getXP();
if (xp == null) {
return;
}
// create a new graphics to keep drawing surface state
Graphics2D gfx = (Graphics2D)g.create();
@ -400,9 +396,6 @@ public class WindowsProgressBarUI extends BasicProgressBarUI
private void paintXPBackground(Graphics g, boolean vertical,
int barRectWidth, int barRectHeight) {
XPStyle xp = XPStyle.getXP();
if (xp == null) {
return;
}
Part part = vertical ? Part.PP_BARVERT : Part.PP_BAR;
Skin skin = xp.getSkin(progressBar, part);

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2005, 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
@ -215,6 +215,7 @@ public class WindowsSliderUI extends BasicSliderUI
}
private Part getXPThumbPart() {
XPStyle xp = XPStyle.getXP();
Part part;
boolean vertical = (slider.getOrientation() == JSlider.VERTICAL);
boolean leftToRight = slider.getComponentOrientation().isLeftToRight();

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 1997, 2006, 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
@ -63,9 +63,6 @@ public class WindowsSpinnerUI extends BasicSpinnerUI {
private void paintXPBackground(Graphics g, JComponent c) {
XPStyle xp = XPStyle.getXP();
if (xp == null) {
return;
}
Skin skin = xp.getSkin(c, Part.EP_EDIT);
State state = getXPState(c);
skin.paintSkin(g, 0, 0, c.getWidth(), c.getHeight(), state);

View File

@ -91,10 +91,9 @@ public class WindowsTableHeaderUI extends BasicTableHeaderUI {
this.column = column;
this.hasRollover = (column == getRolloverColumn());
if (skin == null) {
XPStyle xp = XPStyle.getXP();
skin = (xp != null) ? xp.getSkin(header, Part.HP_HEADERITEM) : null;
skin = XPStyle.getXP().getSkin(header, Part.HP_HEADERITEM);
}
Insets margins = (skin != null) ? skin.getContentMargin() : null;
Insets margins = skin.getContentMargin();
Border border = null;
int contentTop = 0;
int contentLeft = 0;

View File

@ -115,7 +115,7 @@ class XPStyle {
}
}
}
return ThemeReader.isXPStyleEnabled() ? xp : null;
return xp;
}
static boolean isVista() {
@ -180,10 +180,9 @@ class XPStyle {
* should probably be cached there instead of here.
*/
Dimension getDimension(Component c, Part part, State state, Prop prop) {
Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
return (d != null) ? d : new Dimension();
return ThemeReader.getPosition(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
}
/** Get a named <code>Point</code> (e.g. a location or an offset) value
@ -200,7 +199,11 @@ class XPStyle {
Dimension d = ThemeReader.getPosition(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
return (d != null) ? new Point(d.width, d.height) : new Point();
if (d != null) {
return new Point(d.width, d.height);
} else {
return null;
}
}
/** Get a named <code>Insets</code> value from the current style
@ -214,10 +217,9 @@ class XPStyle {
* The return value is already cached in those places.
*/
Insets getMargin(Component c, Part part, State state, Prop prop) {
Insets insets = ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
return (insets != null) ? insets : new Insets(0, 0, 0, 0);
return ThemeReader.getThemeMargins(part.getControlName(c), part.getValue(),
State.getValue(part, state),
prop.getValue());
}
@ -507,17 +509,16 @@ class XPStyle {
int boundingWidth = 100;
int boundingHeight = 100;
Insets insets = ThemeReader.getThemeBackgroundContentMargins(
return ThemeReader.getThemeBackgroundContentMargins(
part.getControlName(null), part.getValue(),
0, boundingWidth, boundingHeight);
return (insets != null) ? insets : new Insets(0, 0, 0, 0);
}
private int getWidth(State state) {
if (size == null) {
size = getPartSize(part, state);
}
return (size != null) ? size.width : 0;
return size.width;
}
int getWidth() {
@ -528,7 +529,7 @@ class XPStyle {
if (size == null) {
size = getPartSize(part, state);
}
return (size != null) ? size.height : 0;
return size.height;
}
int getHeight() {
@ -585,9 +586,6 @@ class XPStyle {
* @param state which state to paint
*/
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
if (ThemeReader.isGetThemeTransitionDurationDefined()
&& component instanceof JComponent
&& SwingUtilities.getAncestorOfClass(CellRendererPane.class,
@ -613,9 +611,6 @@ class XPStyle {
* @param state which state to paint
*/
void paintSkinRaw(Graphics g, int dx, int dy, int dw, int dh, State state) {
if (XPStyle.getXP() == null) {
return;
}
skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
}
@ -635,7 +630,7 @@ class XPStyle {
void paintSkin(Graphics g, int dx, int dy, int dw, int dh, State state,
boolean borderFill) {
if(borderFill && "borderfill".equals(getTypeEnumName(component, part,
state, Prop.BGTYPE)) && XPStyle.getXP() == null) {
state, Prop.BGTYPE))) {
return;
}
skinPainter.paint(null, g, dx, dy, dw, dh, this, state);
@ -689,7 +684,7 @@ class XPStyle {
public GlyphButton(Component parent, Part part) {
XPStyle xp = getXP();
skin = xp != null ? xp.getSkin(parent, part) : null;
skin = xp.getSkin(parent, part);
setBorder(null);
setContentAreaFilled(false);
setMinimumSize(new Dimension(5, 5));
@ -714,16 +709,13 @@ class XPStyle {
}
public void paintComponent(Graphics g) {
if (XPStyle.getXP() == null || skin == null) {
return;
}
Dimension d = getSize();
skin.paintSkin(g, 0, 0, d.width, d.height, getState());
}
public void setPart(Component parent, Part part) {
XPStyle xp = getXP();
skin = xp != null ? xp.getSkin(parent, part) : null;
skin = xp.getSkin(parent, part);
revalidate();
repaint();
}

View File

@ -45,10 +45,6 @@ public final class ThemeReader {
return false;
}
public static boolean isXPStyleEnabled() {
return false;
}
public static void paintBackground(int[] buffer, String widget,
int part, int state, int x, int y, int w, int h, int stride) {
}

View File

@ -61,8 +61,6 @@ public final class ThemeReader {
private static final Lock readLock = readWriteLock.readLock();
private static final Lock writeLock = readWriteLock.writeLock();
static volatile boolean xpStyleEnabled;
static void flush() {
writeLock.lock();
try {
@ -78,10 +76,6 @@ public final class ThemeReader {
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);

View File

@ -72,9 +72,6 @@ public final class WToolkit extends SunToolkit implements Runnable {
private static final PlatformLogger log = PlatformLogger.getLogger("sun.awt.windows.WToolkit");
// Desktop property which specifies whether XP visual styles are in effect
public static final String XPSTYLE_THEME_ACTIVE = "win.xpstyle.themeActive";
static GraphicsConfiguration config;
// System clipboard.
@ -897,7 +894,7 @@ public final class WToolkit extends SunToolkit implements Runnable {
private synchronized void lazilyInitWProps() {
if (wprops == null) {
wprops = new WDesktopProperties(this);
updateProperties(wprops.getProperties());
updateProperties();
}
}
@ -932,27 +929,21 @@ public final class WToolkit extends SunToolkit implements Runnable {
* Windows doesn't always send WM_SETTINGCHANGE when it should.
*/
private void windowsSettingChange() {
// JDK-8039383: Have to update the value of XPSTYLE_THEME_ACTIVE property
// as soon as possible to prevent NPE and other errors because theme data
// has become unavailable.
final Map<String, Object> props = getWProps();
updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
updateProperties(props);
updateProperties();
}
});
}
private synchronized void updateProperties(final Map<String, Object> props) {
if (null == props) {
private synchronized void updateProperties() {
if (null == wprops) {
// wprops has not been initialized, so we have nothing to update
return;
}
updateXPStyleEnabled(props.get(XPSTYLE_THEME_ACTIVE));
Map<String, Object> props = wprops.getProperties();
for (String propName : props.keySet()) {
Object val = props.get(propName);
if (log.isLoggable(PlatformLogger.Level.FINER)) {
@ -962,14 +953,6 @@ public final class WToolkit extends SunToolkit implements Runnable {
}
}
private synchronized Map<String, Object> getWProps() {
return (wprops != null) ? wprops.getProperties() : null;
}
private void updateXPStyleEnabled(final Object dskProp) {
ThemeReader.xpStyleEnabled = Boolean.TRUE.equals(dskProp);
}
@Override
public synchronized void addPropertyChangeListener(String name, PropertyChangeListener pcl) {
if (name == null) {