diff --git a/modules/juce_gui_basics/native/juce_mac_FileChooser.mm b/modules/juce_gui_basics/native/juce_mac_FileChooser.mm index d0fcb48ad2..4d41127d0c 100644 --- a/modules/juce_gui_basics/native/juce_mac_FileChooser.mm +++ b/modules/juce_gui_basics/native/juce_mac_FileChooser.mm @@ -182,7 +182,7 @@ public: std::unique_ptr tempMenu; if (JUCEApplicationBase::isStandaloneApp()) - tempMenu.reset (new TemporaryMainMenuWithStandardCommands()); + tempMenu = std::make_unique (preview); jassert (panel != nil); auto result = [panel runModal]; @@ -191,13 +191,7 @@ public: bool canModalEventBeSentToComponent (const Component* targetComponent) override { - if (targetComponent == nullptr) - return false; - - if (targetComponent == preview) - return true; - - return targetComponent->findParentComponentOfClass() != nullptr; + return TemporaryMainMenuWithStandardCommands::checkModalEvent (preview, targetComponent); } private: diff --git a/modules/juce_gui_basics/native/juce_mac_MainMenu.mm b/modules/juce_gui_basics/native/juce_mac_MainMenu.mm index 216bfe952c..9c147cafde 100644 --- a/modules/juce_gui_basics/native/juce_mac_MainMenu.mm +++ b/modules/juce_gui_basics/native/juce_mac_MainMenu.mm @@ -550,8 +550,8 @@ JuceMainMenuHandler* JuceMainMenuHandler::instance = nullptr; class TemporaryMainMenuWithStandardCommands { public: - TemporaryMainMenuWithStandardCommands() - : oldMenu (MenuBarModel::getMacMainMenu()) + explicit TemporaryMainMenuWithStandardCommands (FilePreviewComponent* filePreviewComponent) + : oldMenu (MenuBarModel::getMacMainMenu()), dummyModalComponent (filePreviewComponent) { if (auto* appleMenu = MenuBarModel::getMacExtraAppleItemsMenu()) oldAppleMenu = std::make_unique (*appleMenu); @@ -601,8 +601,17 @@ public: MenuBarModel::setMacMainMenu (oldMenu, oldAppleMenu.get(), oldRecentItems); } + static bool checkModalEvent (FilePreviewComponent* preview, const Component* targetComponent) + { + if (targetComponent == nullptr) + return false; + + return (targetComponent == preview + || targetComponent->findParentComponentOfClass() != nullptr); + } + private: - MenuBarModel* const oldMenu; + MenuBarModel* const oldMenu = nullptr; std::unique_ptr oldAppleMenu; String oldRecentItems; NSInteger editMenuIndex; @@ -615,8 +624,17 @@ private: // recursive when file dialogs are involved struct SilentDummyModalComp : public Component { - SilentDummyModalComp() {} + explicit SilentDummyModalComp (FilePreviewComponent* p) + : preview (p) {} + void inputAttemptWhenModal() override {} + + bool canModalEventBeSentToComponent (const Component* targetComponent) override + { + return checkModalEvent (preview, targetComponent); + } + + FilePreviewComponent* preview = nullptr; }; SilentDummyModalComp dummyModalComponent;