mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-145568 Import Project non-native file chooser on MacOS
This commit is contained in:
+1
-2
@@ -15,8 +15,7 @@
|
||||
*/
|
||||
package com.intellij.openapi.roots.impl.libraries;
|
||||
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.fileChooser.*;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.libraries.*;
|
||||
import com.intellij.openapi.roots.libraries.ui.LibraryRootsComponentDescriptor;
|
||||
|
||||
@@ -68,8 +68,9 @@ public class FileChooser {
|
||||
@Nullable final Component parent,
|
||||
@Nullable final Project project,
|
||||
@Nullable final VirtualFile toSelect) {
|
||||
Component parentComponent = (parent == null) ? KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow() : parent;
|
||||
LOG.assertTrue(!descriptor.isChooseMultiple());
|
||||
return ArrayUtil.getFirstElement(chooseFiles(descriptor, parent, project, toSelect));
|
||||
return ArrayUtil.getFirstElement(chooseFiles(descriptor, parentComponent, project, toSelect));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -87,7 +88,7 @@ public class FileChooser {
|
||||
@Nullable final Project project,
|
||||
@Nullable final VirtualFile toSelect,
|
||||
@NotNull final Consumer<List<VirtualFile>> callback) {
|
||||
chooseFiles(descriptor, project, KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(), toSelect, callback);
|
||||
chooseFiles(descriptor, project, null, toSelect, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -107,8 +108,9 @@ public class FileChooser {
|
||||
@Nullable final Component parent,
|
||||
@Nullable final VirtualFile toSelect,
|
||||
@NotNull final Consumer<List<VirtualFile>> callback) {
|
||||
Component parentComponent = (parent == null) ? KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow() : parent;
|
||||
final FileChooserFactory factory = FileChooserFactory.getInstance();
|
||||
final PathChooserDialog pathChooser = factory.createPathChooser(descriptor, project, parent);
|
||||
final PathChooserDialog pathChooser = factory.createPathChooser(descriptor, project, parentComponent);
|
||||
pathChooser.choose(toSelect, callback);
|
||||
}
|
||||
|
||||
@@ -126,7 +128,7 @@ public class FileChooser {
|
||||
@Nullable final Project project,
|
||||
@Nullable final VirtualFile toSelect,
|
||||
@NotNull final Consumer<VirtualFile> callback) {
|
||||
chooseFile(descriptor, project, IdeFocusManager.getInstance(project).getFocusOwner(), toSelect, callback);
|
||||
chooseFile(descriptor, project, null, toSelect, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+3
-1
@@ -43,6 +43,9 @@ public class FileChooserFactoryImpl extends FileChooserFactory {
|
||||
public FileChooserDialog createFileChooser(@NotNull FileChooserDescriptor descriptor,
|
||||
@Nullable Project project,
|
||||
@Nullable Component parent) {
|
||||
if (useNativeMacChooser(descriptor)) {
|
||||
return new MacPathChooserDialog(descriptor, parent, project);
|
||||
}
|
||||
if (parent != null) {
|
||||
return new FileChooserDialogImpl(descriptor, parent, project);
|
||||
}
|
||||
@@ -69,7 +72,6 @@ public class FileChooserFactoryImpl extends FileChooserFactory {
|
||||
|
||||
private static boolean useNativeMacChooser(final FileChooserDescriptor descriptor) {
|
||||
return SystemInfo.isMac &&
|
||||
!descriptor.isChooseJarContents() &&
|
||||
SystemProperties.getBooleanProperty("native.mac.file.chooser.enabled", true) &&
|
||||
Registry.is("ide.mac.file.chooser.native") /*&&
|
||||
!DialogWrapper.isMultipleModalDialogs()*/;
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.openapi.command.CommandProcessor;
|
||||
import com.intellij.openapi.command.CommandProcessorEx;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDialog;
|
||||
import com.intellij.openapi.fileChooser.PathChooserDialog;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
@@ -49,12 +50,13 @@ import java.util.stream.Stream;
|
||||
* @author Denis Fokin
|
||||
*/
|
||||
|
||||
public class MacPathChooserDialog implements PathChooserDialog {
|
||||
public class MacPathChooserDialog implements PathChooserDialog, FileChooserDialog{
|
||||
|
||||
private FileDialog myFileDialog;
|
||||
private final FileChooserDescriptor myFileChooserDescriptor;
|
||||
private final Component myParent;
|
||||
private final String myTitle;
|
||||
private VirtualFile [] virtualFiles;
|
||||
|
||||
public MacPathChooserDialog(FileChooserDescriptor descriptor, Component parent, Project project) {
|
||||
|
||||
@@ -120,10 +122,11 @@ public class MacPathChooserDialog implements PathChooserDialog {
|
||||
}
|
||||
|
||||
File[] files = myFileDialog.getFiles();
|
||||
List<VirtualFile> virtualFilesList = getChosenFiles(Stream.of(files));
|
||||
List<VirtualFile> virtualFileList = getChosenFiles(Stream.of(files));
|
||||
virtualFiles = virtualFileList.toArray(VirtualFile.EMPTY_ARRAY);
|
||||
|
||||
try {
|
||||
myFileChooserDescriptor.validateSelectedFiles(virtualFilesList.toArray(VirtualFile.EMPTY_ARRAY));
|
||||
myFileChooserDescriptor.validateSelectedFiles(virtualFiles);
|
||||
}
|
||||
catch (Exception e) {
|
||||
Messages.showErrorDialog(myParent, e.getMessage(), myTitle);
|
||||
@@ -131,7 +134,7 @@ public class MacPathChooserDialog implements PathChooserDialog {
|
||||
}
|
||||
|
||||
if (!ArrayUtil.isEmpty(files)) {
|
||||
callback.consume(virtualFilesList);
|
||||
callback.consume(virtualFileList);
|
||||
}
|
||||
else if (callback instanceof FileChooser.FileChooserConsumer) {
|
||||
((FileChooser.FileChooserConsumer)callback).cancelled();
|
||||
@@ -145,4 +148,17 @@ public class MacPathChooserDialog implements PathChooserDialog {
|
||||
// Therefore we should minimize usage of this case.
|
||||
return new FileDialog((Frame)null, title, load);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFile[] choose(@Nullable VirtualFile toSelect, @Nullable Project project) {
|
||||
choose(toSelect, files -> {});
|
||||
return virtualFiles;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFile[] choose(@Nullable Project project, @NotNull VirtualFile... toSelect) {
|
||||
return choose((toSelect.length > 0 ? toSelect[0] : null), project);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user