diff --git a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp index ca59e419a5..35153cf1fe 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp @@ -65,6 +65,7 @@ FileBrowserComponent::FileBrowserComponent (int flags_, } fileList.reset (new DirectoryContentsList (this, thread)); + fileList->setDirectory (currentRoot, true, true); if ((flags & useTreeView) != 0) { @@ -124,6 +125,9 @@ FileBrowserComponent::FileBrowserComponent (int flags_, setRoot (currentRoot); + if (filename.isNotEmpty()) + setFileName (filename); + thread.startThread (4); startTimer (2000); diff --git a/modules/juce_gui_basics/filebrowser/juce_FileChooser.h b/modules/juce_gui_basics/filebrowser/juce_FileChooser.h index a978891c38..cf32e57e6f 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileChooser.h +++ b/modules/juce_gui_basics/filebrowser/juce_FileChooser.h @@ -66,7 +66,12 @@ public: @param initialFileOrDirectory the file or directory that should be selected when the dialog box opens. If this parameter is set to File(), a sensible default directory will - be used instead. + be used instead. When using native dialogs, not + all platforms will actually select the file. For + example, on macOS, when initialFileOrDirectory is + a file, only the parent directory of + initialFileOrDirectory will be used as the initial + directory of the native file chooser. Note: on iOS when saving a file, a user will not be able to change a file name, so it may be a good diff --git a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp index f1407a4a7c..11623e46ad 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp @@ -33,7 +33,8 @@ Image juce_createIconForFile (const File& file); //============================================================================== FileListComponent::FileListComponent (DirectoryContentsList& listToShow) : ListBox ({}, nullptr), - DirectoryContentsDisplayComponent (listToShow) + DirectoryContentsDisplayComponent (listToShow), + lastDirectory (listToShow.getDirectory()) { setModel (this); directoryContentsList.addChangeListener (this); @@ -70,12 +71,15 @@ void FileListComponent::setSelectedFile (const File& f) { if (directoryContentsList.getFile(i) == f) { + fileWaitingToBeSelected = File(); + selectRow (i); return; } } deselectAllRows(); + fileWaitingToBeSelected = f; } //============================================================================== @@ -85,9 +89,13 @@ void FileListComponent::changeListenerCallback (ChangeBroadcaster*) if (lastDirectory != directoryContentsList.getDirectory()) { + fileWaitingToBeSelected = File(); lastDirectory = directoryContentsList.getDirectory(); deselectAllRows(); } + + if (fileWaitingToBeSelected != File()) + setSelectedFile (fileWaitingToBeSelected); } //============================================================================== diff --git a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h index 770e666c20..55afdfc679 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h +++ b/modules/juce_gui_basics/filebrowser/juce_FileListComponent.h @@ -76,7 +76,7 @@ public: private: //============================================================================== - File lastDirectory; + File lastDirectory, fileWaitingToBeSelected; class ItemComponent; void changeListenerCallback (ChangeBroadcaster*) override;