From 793f1bf2ee7d7df981b6ef38e16b98e63a897db3 Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 31 Jan 2022 12:31:40 +0000 Subject: [PATCH] FileChooser: Avoid crash when destroying an open non-native filechooser --- .../filebrowser/juce_FileChooser.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp b/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp index e8086a41cb..58ee108b7f 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp +++ b/modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp @@ -27,7 +27,8 @@ namespace juce { //============================================================================== -class FileChooser::NonNative : public FileChooser::Pimpl +class FileChooser::NonNative : public std::enable_shared_from_this, + public FileChooser::Pimpl { public: NonNative (FileChooser& fileChooser, int flags, FilePreviewComponent* preview) @@ -50,7 +51,15 @@ public: void launch() override { dialogBox.centreWithDefaultSize (nullptr); - dialogBox.enterModalState (true, ModalCallbackFunction::create ([this] (int r) { modalStateFinished (r); }), true); + + const std::weak_ptr ref (shared_from_this()); + auto* callback = ModalCallbackFunction::create ([ref] (int r) + { + if (auto locked = ref.lock()) + locked->modalStateFinished (r); + }); + + dialogBox.enterModalState (true, callback, true); } void runModally() override