From 21c214aec8d812244cd7c54bf924714e0d568696 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 31 Aug 2022 16:15:59 +0100 Subject: [PATCH] DirectoryContentsList: Start thread before attempting to scan files This fixes an issue where opening a FileTreeComponent could cause the UI to hang. The call to subcontentsList->isStillLoading() in FileListTreeItem::selectFile() would always return true because the file-scanner TimeSliceThread wasn't started until the selectFile() call finished. --- .../filebrowser/juce_DirectoryContentsList.cpp | 2 +- .../filebrowser/juce_FileBrowserComponent.cpp | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp b/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp index 134e451191..0aeef06267 100644 --- a/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp @@ -27,7 +27,7 @@ namespace juce { DirectoryContentsList::DirectoryContentsList (const FileFilter* f, TimeSliceThread& t) - : fileFilter (f), thread (t) + : fileFilter (f), thread (t) { } diff --git a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp index 39f337f4c5..0aa38321de 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp @@ -63,6 +63,9 @@ FileBrowserComponent::FileBrowserComponent (int flags_, filename = initialFileOrDirectory.getFileName(); } + // The thread must be started before the DirectoryContentsList attempts to scan any file + thread.startThread (4); + fileList.reset (new DirectoryContentsList (this, thread)); fileList->setDirectory (currentRoot, true, true); @@ -122,8 +125,6 @@ FileBrowserComponent::FileBrowserComponent (int flags_, if (filename.isNotEmpty()) setFileName (filename); - thread.startThread (4); - startTimer (2000); }