From 8791f08336990402fc4d1980ccd08ac4b6ef1d0a Mon Sep 17 00:00:00 2001 From: Denis Fokin Date: Wed, 3 Aug 2016 15:07:20 +0300 Subject: [PATCH] IDEA-159369 Mac Native File Chooser doesn't open on pressing Browse [...] button; IAE at MacPathChooserDialog.findOwnerByComponent --- .../intellij/openapi/ui/ComponentWithBrowseButton.java | 2 +- .../src/com/intellij/ui/mac/MacPathChooserDialog.java | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java index 931c43d2dca8..3cb79e7cbf30 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/ComponentWithBrowseButton.java @@ -256,7 +256,7 @@ public class ComponentWithBrowseButton extends JPanel i } } - FileChooser.chooseFile(fileChooserDescriptor, getProject(), getInitialFile(), file -> onFileChosen(file)); + FileChooser.chooseFile(fileChooserDescriptor, getProject(), myTextComponent, getInitialFile(), this::onFileChosen); } @Nullable diff --git a/platform/platform-impl/src/com/intellij/ui/mac/MacPathChooserDialog.java b/platform/platform-impl/src/com/intellij/ui/mac/MacPathChooserDialog.java index e2040c57cb6c..cda20be65b21 100644 --- a/platform/platform-impl/src/com/intellij/ui/mac/MacPathChooserDialog.java +++ b/platform/platform-impl/src/com/intellij/ui/mac/MacPathChooserDialog.java @@ -21,6 +21,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.ArrayUtil; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -63,10 +64,14 @@ public class MacPathChooserDialog implements PathChooserDialog { @Override public void choose(@Nullable VirtualFile toSelect, @NotNull Consumer> callback) { - myFileDialog.setFile(toSelect.getCanonicalPath()); + String path = toSelect != null ? toSelect.getCanonicalPath() : null; + myFileDialog.setFile(path); myFileDialog.setVisible(true); - callback.consume(getChosenFiles(Stream.of(myFileDialog.getFiles()))); + File[] files = myFileDialog.getFiles(); + if (!ArrayUtil.isEmpty(files)) { + callback.consume(getChosenFiles(Stream.of(files))); + } } @NotNull