< prev index next >

src/java.desktop/windows/classes/sun/awt/shell/Win32ShellFolder2.java

Print this page

        

*** 161,170 **** --- 161,191 ---- public int getIconID() { return iconID; } } + // Known Folder data + static class KnownfolderDefenition { + String guid; + int category; + String name; + String description; + String parent; + String relativePath; + String parsingName; + String tooltip; + String localizedName; + String icon; + String security; + long attributes; + int defenitionFlags; + String ftidType; + String path; + String saveLocation; + static final List<KnownfolderDefenition> libraries = getLibraries(); + } + static class FolderDisposer implements sun.java2d.DisposerRecord { /* * This is cached as a concession to getFolderType(), which needs * an absolute PIDL. */
*** 576,586 **** getLinkLocation(parentIShellFolder, relativePIDL, false)); if (s != null && s.startsWith("\\\\")) { return s; } } ! return getDisplayNameOf(parentIShellFolder, relativePIDL, SHGDN_FORPARSING); } // Needs to be accessible to Win32ShellFolderManager2 static String getFileSystemPath(final int csidl) throws IOException, InterruptedException { String path = invoke(new Callable<String>() { --- 597,622 ---- getLinkLocation(parentIShellFolder, relativePIDL, false)); if (s != null && s.startsWith("\\\\")) { return s; } } ! String path = getDisplayNameOf(parentIShellFolder, relativePIDL, ! SHGDN_FORPARSING); ! // if this is a library its default save location is taken as a path ! // this is a temp fix until java.io starts support Libraries ! if( path != null && path.startsWith("::{") && ! path.toLowerCase().endsWith(".library-ms")) { ! for (KnownfolderDefenition kf : KnownfolderDefenition.libraries) { ! if( path.toLowerCase().endsWith( ! kf.relativePath.toLowerCase()) && ! path.toUpperCase().startsWith( ! kf.parsingName.substring(0, 40).toUpperCase()) ) { ! return kf.saveLocation; ! } ! } ! } ! return path; } // Needs to be accessible to Win32ShellFolderManager2 static String getFileSystemPath(final int csidl) throws IOException, InterruptedException { String path = invoke(new Callable<String>() {
*** 846,855 **** --- 882,894 ---- // NOTE: this method uses COM and must be called on the 'COM thread'. See ComInvoker for the details private static native String getDisplayNameOf(long parentIShellFolder, long relativePIDL, int attrs); + // Returns data of all Known Folders registered in the system + private static native KnownfolderDefenition[] loadKnownFolders(); + /** * @return The name used to display this shell folder */ public String getDisplayName() { if (displayName == null) {
*** 1176,1181 **** --- 1215,1242 ---- }); return result == null ? 0 : result; } } + + // Extracts libraries and their default save locations from Known Folders list + private static List<KnownfolderDefenition> getLibraries() { + return invoke(new Callable<List<KnownfolderDefenition>>() { + @Override + public List<KnownfolderDefenition> call() throws Exception { + KnownfolderDefenition[] all = loadKnownFolders(); + List<KnownfolderDefenition> folders = new ArrayList<>(); + if (all != null) { + for (KnownfolderDefenition kf : all) { + if (kf.relativePath == null || kf.parsingName == null || + kf.saveLocation == null) { + continue; + } + folders.add(kf); + } + } + return folders; + } + }); + } + }
< prev index next >