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.
*/
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
//==============================================================================


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

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


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

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


Loading…
Cancel
Save