提交 bafc6e8b 编写于 作者: R rupashka

6351074: JFileChooser removes leading space in filename

Summary: Removed trimming of leading spaces in filename
Reviewed-by: alexp
上级 363ab66c
...@@ -36,6 +36,7 @@ import java.awt.datatransfer.*; ...@@ -36,6 +36,7 @@ import java.awt.datatransfer.*;
import java.beans.*; import java.beans.*;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import java.util.List;
import java.util.regex.*; import java.util.regex.*;
import sun.awt.shell.ShellFolder; import sun.awt.shell.ShellFolder;
import sun.swing.*; import sun.swing.*;
...@@ -829,11 +830,17 @@ public class BasicFileChooserUI extends FileChooserUI { ...@@ -829,11 +830,17 @@ public class BasicFileChooserUI extends FileChooserUI {
File dir = chooser.getCurrentDirectory(); File dir = chooser.getCurrentDirectory();
if (filename != null) { if (filename != null) {
// Remove whitespace from beginning and end of filename // Remove whitespaces from end of filename
filename = filename.trim(); int i = filename.length() - 1;
while (i >=0 && filename.charAt(i) <= ' ') {
i--;
}
filename = filename.substring(0, i + 1);
} }
if (filename == null || filename.equals("")) { if (filename == null || filename.length() == 0) {
// no file selected, multiple selection off, therefore cancel the approve action // no file selected, multiple selection off, therefore cancel the approve action
resetGlobFilter(); resetGlobFilter();
return; return;
...@@ -842,100 +849,93 @@ public class BasicFileChooserUI extends FileChooserUI { ...@@ -842,100 +849,93 @@ public class BasicFileChooserUI extends FileChooserUI {
File selectedFile = null; File selectedFile = null;
File[] selectedFiles = null; File[] selectedFiles = null;
if (filename != null && !filename.equals("")) { // Unix: Resolve '~' to user's home directory
// Unix: Resolve '~' to user's home directory if (File.separatorChar == '/') {
if (File.separatorChar == '/') { if (filename.startsWith("~/")) {
if (filename.startsWith("~/")) { filename = System.getProperty("user.home") + filename.substring(1);
filename = System.getProperty("user.home") + filename.substring(1); } else if (filename.equals("~")) {
} else if (filename.equals("~")) { filename = System.getProperty("user.home");
filename = System.getProperty("user.home");
}
} }
}
if (chooser.isMultiSelectionEnabled() && filename.startsWith("\"")) { if (chooser.isMultiSelectionEnabled() && filename.length() > 1 &&
ArrayList<File> fList = new ArrayList<File>(); filename.charAt(0) == '"' && filename.charAt(filename.length() - 1) == '"') {
List<File> fList = new ArrayList<File>();
filename = filename.substring(1); String[] files = filename.substring(1, filename.length() - 1).split("\" \"");
if (filename.endsWith("\"")) { // Optimize searching files by names in "children" array
filename = filename.substring(0, filename.length()-1); Arrays.sort(files);
}
File[] children = null; File[] children = null;
int childIndex = 0; int childIndex = 0;
do {
String str; for (String str : files) {
int i = filename.indexOf("\" \""); File file = fs.createFileObject(str);
if (i > 0) { if (!file.isAbsolute()) {
str = filename.substring(0, i); if (children == null) {
filename = filename.substring(i+3); children = fs.getFiles(dir, false);
} else { Arrays.sort(children);
str = filename;
filename = "";
} }
File file = fs.createFileObject(str); for (int k = 0; k < children.length; k++) {
if (!file.isAbsolute()) { int l = (childIndex + k) % children.length;
if (children == null) { if (children[l].getName().equals(str)) {
children = fs.getFiles(dir, false); file = children[l];
Arrays.sort(children); childIndex = l + 1;
} break;
for (int k = 0; k < children.length; k++) {
int l = (childIndex + k) % children.length;
if (children[l].getName().equals(str)) {
file = children[l];
childIndex = l + 1;
break;
}
} }
} }
fList.add(file);
} while (filename.length() > 0);
if (fList.size() > 0) {
selectedFiles = fList.toArray(new File[fList.size()]);
} }
resetGlobFilter(); fList.add(file);
} else { }
selectedFile = fs.createFileObject(filename);
if(!selectedFile.isAbsolute()) { if (!fList.isEmpty()) {
selectedFile = fs.getChild(dir, filename); selectedFiles = fList.toArray(new File[fList.size()]);
}
resetGlobFilter();
} else {
selectedFile = fs.createFileObject(filename);
if (!selectedFile.isAbsolute()) {
selectedFile = fs.getChild(dir, filename);
}
// check for wildcard pattern
FileFilter currentFilter = chooser.getFileFilter();
if (!selectedFile.exists() && isGlobPattern(filename)) {
changeDirectory(selectedFile.getParentFile());
if (globFilter == null) {
globFilter = new GlobFilter();
} }
// check for wildcard pattern try {
FileFilter currentFilter = chooser.getFileFilter(); globFilter.setPattern(selectedFile.getName());
if (!selectedFile.exists() && isGlobPattern(filename)) { if (!(currentFilter instanceof GlobFilter)) {
changeDirectory(selectedFile.getParentFile()); actualFileFilter = currentFilter;
if (globFilter == null) {
globFilter = new GlobFilter();
}
try {
globFilter.setPattern(selectedFile.getName());
if (!(currentFilter instanceof GlobFilter)) {
actualFileFilter = currentFilter;
}
chooser.setFileFilter(null);
chooser.setFileFilter(globFilter);
return;
} catch (PatternSyntaxException pse) {
// Not a valid glob pattern. Abandon filter.
} }
chooser.setFileFilter(null);
chooser.setFileFilter(globFilter);
return;
} catch (PatternSyntaxException pse) {
// Not a valid glob pattern. Abandon filter.
} }
}
resetGlobFilter(); resetGlobFilter();
// Check for directory change action // Check for directory change action
boolean isDir = (selectedFile != null && selectedFile.isDirectory()); boolean isDir = (selectedFile != null && selectedFile.isDirectory());
boolean isTrav = (selectedFile != null && chooser.isTraversable(selectedFile)); boolean isTrav = (selectedFile != null && chooser.isTraversable(selectedFile));
boolean isDirSelEnabled = chooser.isDirectorySelectionEnabled(); boolean isDirSelEnabled = chooser.isDirectorySelectionEnabled();
boolean isFileSelEnabled = chooser.isFileSelectionEnabled(); boolean isFileSelEnabled = chooser.isFileSelectionEnabled();
boolean isCtrl = (e != null && (e.getModifiers() & ActionEvent.CTRL_MASK) != 0); boolean isCtrl = (e != null && (e.getModifiers() & ActionEvent.CTRL_MASK) != 0);
if (isDir && isTrav && (isCtrl || !isDirSelEnabled)) { if (isDir && isTrav && (isCtrl || !isDirSelEnabled)) {
changeDirectory(selectedFile); changeDirectory(selectedFile);
return; return;
} else if ((isDir || !isFileSelEnabled) } else if ((isDir || !isFileSelEnabled)
&& (!isDir || !isDirSelEnabled) && (!isDir || !isDirSelEnabled)
&& (!isDirSelEnabled || selectedFile.exists())) { && (!isDirSelEnabled || selectedFile.exists())) {
selectedFile = null; selectedFile = null;
}
} }
} }
if (selectedFiles != null || selectedFile != null) { if (selectedFiles != null || selectedFile != null) {
if (selectedFiles != null || chooser.isMultiSelectionEnabled()) { if (selectedFiles != null || chooser.isMultiSelectionEnabled()) {
if (selectedFiles == null) { if (selectedFiles == null) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册