There is a bug where FileListComponent::setSelectedFile()
won’t work when the directoryContentsList
has just been given a new directory and is still loading.
The issue is that FileListComponent::lastDirectory
isn’t updated immediately when directoryContentsList.setDirectory()
is called, and so fileWaitingToBeSelected
is cleared as soon as FileListComponent::changeListenerCallback()
is called here:
Here is a PIP to reproduce (a FileListComponent
loading the /Applications
folder and trying to select /Applications/Utilities
)
PIP
/*******************************************************************************
The block below describes the properties of this PIP. A PIP is a short snippet
of code that can be read by the Projucer and used to generate a JUCE project.
BEGIN_JUCE_PIP_METADATA
name: TestPip
dependencies: juce_core, juce_data_structures, juce_events, juce_graphics, juce_gui_basics
exporters: XCODE_MAC
moduleFlags: JUCE_STRICT_REFCOUNTEDPOINTER=1
type: Component
mainClass: MyComponent
END_JUCE_PIP_METADATA
*******************************************************************************/
#pragma once
//==============================================================================
class MyComponent : public juce::Component
{
public:
//==============================================================================
MyComponent()
{
addAndMakeVisible (fileListComponent);
timeSliceThread.startThread();
auto applicationsDir = File::getSpecialLocation (File::globalApplicationsDirectory);
directoryContentsList.setDirectory (applicationsDir, File::findFilesAndDirectories, true);
fileListComponent.setSelectedFile (applicationsDir.getChildFile ("Utilities"));
setSize (600, 400);
}
//==============================================================================
void paint (juce::Graphics& g) override { g.fillAll (Colours::white); }
void resized() override { fileListComponent.setBounds (getLocalBounds()); }
private:
//==============================================================================
TimeSliceThread timeSliceThread { "timeSliceThread" };
DirectoryContentsList directoryContentsList { nullptr, timeSliceThread };
FileListComponent fileListComponent { directoryContentsList };
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MyComponent)
};