diff --git a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java index 0e3c868ef98a7578a527d4c2522bdef03b0c2dee..6feea39c10dcb5aae9fccb02c84bb83b66fe94e0 100644 --- a/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java +++ b/jdk/src/share/classes/sun/swing/WindowsPlacesBar.java @@ -93,11 +93,18 @@ public class WindowsPlacesBar extends JToolBar if (index >= 0 && index < folderName.length() - 1) { folderName = folderName.substring(index + 1); } - Icon icon = null; + Icon icon; if (files[i] instanceof ShellFolder) { // We want a large icon, fsv only gives us a small. ShellFolder sf = (ShellFolder)files[i]; - icon = new ImageIcon(sf.getIcon(true), sf.getFolderType()); + Image image = sf.getIcon(true); + + if (image == null) { + // Get default image + image = (Image) ShellFolder.get("shell32LargeIcon 1"); + } + + icon = image == null ? null : new ImageIcon(image, sf.getFolderType()); } else { icon = fsv.getSystemIcon(files[i]); } diff --git a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java index 5f3df8dbf94eea54e4e461e9cb65d0e29b0fd914..74aecd4437f08fe0797be4f60d2b12e4fd4cc0dc 100644 --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java @@ -910,18 +910,20 @@ final class Win32ShellFolder2 extends ShellFolder { /** * Gets an icon from the Windows system icon list as an Image */ - static Image getShell32Icon(int iconID) { + static Image getShell32Icon(int iconID, boolean getLargeIcon) { boolean useVGAColors = true; // Will be ignored on XP and later + int size = getLargeIcon ? 32 : 16; + Toolkit toolkit = Toolkit.getDefaultToolkit(); String shellIconBPP = (String)toolkit.getDesktopProperty("win.icon.shellIconBPP"); if (shellIconBPP != null) { useVGAColors = shellIconBPP.equals("4"); } - long hIcon = getIconResource("shell32.dll", iconID, 16, 16, useVGAColors); + long hIcon = getIconResource("shell32.dll", iconID, size, size, useVGAColors); if (hIcon != 0) { - Image icon = makeIcon(hIcon, false); + Image icon = makeIcon(hIcon, getLargeIcon); disposeIcon(hIcon); return icon; } diff --git a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java index 9454b674f5eca6bcf4b224065fe31e570d8fa09b..ef3dfa6a46dfe61832c7628e1d0d29cba7fb24a1 100644 --- a/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java +++ b/jdk/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java @@ -313,13 +313,12 @@ public class Win32ShellFolderManager2 extends ShellFolderManager { return null; } return Win32ShellFolder2.getSystemIcon(iconType); - } else if (key.startsWith("shell32Icon ")) { - int i; - String name = key.substring(key.indexOf(" ")+1); + } else if (key.startsWith("shell32Icon ") || key.startsWith("shell32LargeIcon ")) { + String name = key.substring(key.indexOf(" ") + 1); try { - i = Integer.parseInt(name); + int i = Integer.parseInt(name); if (i >= 0) { - return Win32ShellFolder2.getShell32Icon(i); + return Win32ShellFolder2.getShell32Icon(i, key.startsWith("shell32LargeIcon ")); } } catch (NumberFormatException ex) { }