< 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 >