Browse Source

Fix for disappearing Apple extras menu items when showing native file choosers.

tags/2021-05-28
jules 13 years ago
parent
commit
ec67783251
3 changed files with 25 additions and 5 deletions
  1. +5
    -0
      modules/juce_gui_basics/menus/juce_MenuBarModel.h
  2. +7
    -2
      modules/juce_gui_basics/native/juce_mac_FileChooser.mm
  3. +13
    -3
      modules/juce_gui_basics/native/juce_mac_MainMenu.mm

+ 5
- 0
modules/juce_gui_basics/menus/juce_MenuBarModel.h View File

@@ -154,6 +154,11 @@ public:
the main menu bar. the main menu bar.
*/ */
static MenuBarModel* getMacMainMenu(); static MenuBarModel* getMacMainMenu();
/** MAC ONLY - Returns the menu that was last passed as the extraAppleMenuItems
argument to setMacMainMenu(), or nullptr if none was specified.
*/
static const PopupMenu* getMacExtraAppleItemsMenu();
#endif #endif
//============================================================================== //==============================================================================


+ 7
- 2
modules/juce_gui_basics/native/juce_mac_FileChooser.mm View File

@@ -89,8 +89,12 @@ class TemporaryMainMenuWithStandardCommands
{ {
public: public:
TemporaryMainMenuWithStandardCommands() TemporaryMainMenuWithStandardCommands()
: oldMenu (MenuBarModel::getMacMainMenu())
: oldMenu (MenuBarModel::getMacMainMenu()), oldAppleMenu (nullptr)
{ {
const PopupMenu* appleMenu = MenuBarModel::getMacExtraAppleItemsMenu();
if (appleMenu != nullptr)
oldAppleMenu = new PopupMenu (*appleMenu);
MenuBarModel::setMacMainMenu (nullptr); MenuBarModel::setMacMainMenu (nullptr);
NSMenu* menu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("Edit")]; NSMenu* menu = [[NSMenu alloc] initWithTitle: nsStringLiteral ("Edit")];
@@ -119,11 +123,12 @@ public:
~TemporaryMainMenuWithStandardCommands() ~TemporaryMainMenuWithStandardCommands()
{ {
MenuBarModel::setMacMainMenu (oldMenu);
MenuBarModel::setMacMainMenu (oldMenu, oldAppleMenu);
} }
private: private:
MenuBarModel* oldMenu; MenuBarModel* oldMenu;
ScopedPointer<PopupMenu> oldAppleMenu;
}; };
//============================================================================== //==============================================================================


+ 13
- 3
modules/juce_gui_basics/native/juce_mac_MainMenu.mm View File

@@ -38,7 +38,7 @@ public:
~JuceMainMenuHandler() ~JuceMainMenuHandler()
{ {
setMenu (nullptr);
setMenu (nullptr, nullptr);
jassert (instance == this); jassert (instance == this);
instance = nullptr; instance = nullptr;
@@ -46,7 +46,7 @@ public:
[callback release]; [callback release];
} }
void setMenu (MenuBarModel* const newMenuBarModel)
void setMenu (MenuBarModel* const newMenuBarModel, const PopupMenu* newExtraAppleMenuItems)
{ {
if (currentModel != newMenuBarModel) if (currentModel != newMenuBarModel)
{ {
@@ -60,6 +60,9 @@ public:
menuBarItemsChanged (nullptr); menuBarItemsChanged (nullptr);
} }
extraAppleMenuItems = newExtraAppleMenuItems != nullptr ? new PopupMenu (*newExtraAppleMenuItems)
: nullptr;
} }
void addSubMenu (NSMenu* parent, const PopupMenu& child, void addSubMenu (NSMenu* parent, const PopupMenu& child,
@@ -262,6 +265,7 @@ public:
static JuceMainMenuHandler* instance; static JuceMainMenuHandler* instance;
MenuBarModel* currentModel; MenuBarModel* currentModel;
ScopedPointer<PopupMenu> extraAppleMenuItems;
uint32 lastUpdateTime; uint32 lastUpdateTime;
NSObject* callback; NSObject* callback;
@@ -569,7 +573,7 @@ void MenuBarModel::setMacMainMenu (MenuBarModel* newMenuBarModel,
if (JuceMainMenuHandler::instance == nullptr) if (JuceMainMenuHandler::instance == nullptr)
JuceMainMenuHandler::instance = new JuceMainMenuHandler(); JuceMainMenuHandler::instance = new JuceMainMenuHandler();
JuceMainMenuHandler::instance->setMenu (newMenuBarModel);
JuceMainMenuHandler::instance->setMenu (newMenuBarModel, extraAppleMenuItems);
} }
} }
@@ -585,6 +589,12 @@ MenuBarModel* MenuBarModel::getMacMainMenu()
? JuceMainMenuHandler::instance->currentModel : nullptr; ? JuceMainMenuHandler::instance->currentModel : nullptr;
} }
const PopupMenu* MenuBarModel::getMacExtraAppleItemsMenu()
{
return JuceMainMenuHandler::instance != nullptr
? JuceMainMenuHandler::instance->extraAppleMenuItems.get() : nullptr;
}
void juce_initialiseMacMainMenu() void juce_initialiseMacMainMenu()
{ {
if (JuceMainMenuHandler::instance == nullptr) if (JuceMainMenuHandler::instance == nullptr)


Loading…
Cancel
Save