diff --git a/src/AudacityApp.cpp b/src/AudacityApp.cpp index 919bca0c4..bc847067e 100644 --- a/src/AudacityApp.cpp +++ b/src/AudacityApp.cpp @@ -1159,14 +1159,14 @@ bool AudacityApp::OnInit() #ifdef AUDACITY_NAME wxString appName = wxT(AUDACITY_NAME); - wxString vendorName = wxT(AUDACITY_NAME); #else - wxString vendorName = wxT("Audacity"); wxString appName = wxT("Audacity"); #endif - wxTheApp->SetVendorName(vendorName); wxTheApp->SetAppName(appName); + // Explicitly set since OSX will use it for the "Quit" menu item + wxTheApp->SetAppDisplayName(wxT("Audacity")); + wxTheApp->SetVendorName(wxT("Audacity")); // Unused strings that we want to be translated, even though // we're not using them yet... diff --git a/src/commands/CommandManager.cpp b/src/commands/CommandManager.cpp index 68eddb603..0054b1857 100644 --- a/src/commands/CommandManager.cpp +++ b/src/commands/CommandManager.cpp @@ -450,7 +450,7 @@ void CommandManager::PurgeData() /// Names it according to the passed-in string argument. /// /// If the menubar already exists, simply returns it. -wxMenuBar *CommandManager::AddMenuBar(wxString sMenu) +wxMenuBar *CommandManager::AddMenuBar(const wxString & sMenu) { wxMenuBar *menuBar = GetMenuBar(sMenu); if (menuBar) @@ -470,7 +470,7 @@ wxMenuBar *CommandManager::AddMenuBar(wxString sMenu) /// /// Retrieves the menubar based on the name given in AddMenuBar(name) /// -wxMenuBar * CommandManager::GetMenuBar(wxString sMenu) const +wxMenuBar * CommandManager::GetMenuBar(const wxString & sMenu) const { for(unsigned int i = 0; i < mMenuBarList.GetCount(); i++) { @@ -495,29 +495,26 @@ wxMenuBar * CommandManager::CurrentMenuBar() const /// -/// This makes a new menu and adds it to the 'CurrentMenuBar' +/// This starts a new menu /// -/// If the menu already exists, all of the items in it are -/// cleared instead. -/// -void CommandManager::BeginMenu(wxString tNameIn) +void CommandManager::BeginMenu(const wxString & tName) { - wxString tName = tNameIn; - wxMenu *tmpMenu = new wxMenu(); mCurrentMenu = tmpMenu; mCurrentMenuName = tName; - - CurrentMenuBar()->Append(mCurrentMenu, tName); } /// -/// This ends a menu by setting the pointer to it -/// to NULL. It is still attached to the CurrentMenuBar() +/// This attaches a menu to the menubar and ends the menu +/// void CommandManager::EndMenu() { + // Add the menu to the menubard after all menu items have been + // added to the menu to allow OSX to rearrange special menu + // items like Preferences, About, and Quit. + CurrentMenuBar()->Append(mCurrentMenu, mCurrentMenuName); mCurrentMenu = NULL; mCurrentMenuName = COMMAND; } @@ -526,10 +523,8 @@ void CommandManager::EndMenu() /// /// This starts a new submenu, and names it according to /// the function's argument. -wxMenu* CommandManager::BeginSubMenu(wxString tNameIn) +wxMenu* CommandManager::BeginSubMenu(const wxString & tName) { - wxString tName = tNameIn; - SubMenuListEntry *tmpEntry = new SubMenuListEntry; tmpEntry->menu = new wxMenu(); @@ -597,12 +592,12 @@ wxMenu * CommandManager::CurrentMenu() const /// /// Add a menu item to the current menu. When the user selects it, the /// given functor will be called -void CommandManager::InsertItem(wxString name, wxString label_in, - CommandFunctor *callback, wxString after, +void CommandManager::InsertItem(const wxString & name, + const wxString & label_in, + CommandFunctor *callback, + const wxString & after, int checkmark) { - wxString label = label_in; - wxMenuBar *bar = GetActiveProject()->GetMenuBar(); wxArrayString names = ::wxStringTokenize(after, wxT(":")); size_t cnt = names.GetCount(); @@ -649,9 +644,9 @@ void CommandManager::InsertItem(wxString name, wxString label_in, } } - CommandListEntry *entry = NewIdentifier(name, label, menu, callback, false, 0, 0); + CommandListEntry *entry = NewIdentifier(name, label_in, menu, callback, false, 0, 0); int ID = entry->id; - label = GetLabel(entry); + wxString label = GetLabel(entry); if (checkmark >= 0) { menu->InsertCheckItem(pos, ID, label); @@ -727,7 +722,8 @@ void CommandManager::AddItem(const wxChar *name, /// with its position in the list as the index number. /// When you call Enable on this command name, it will enable or disable /// all of the items at once. -void CommandManager::AddItemList(wxString name, wxArrayString labels, +void CommandManager::AddItemList(const wxString & name, + const wxArrayString & labels, CommandFunctor *callback) { for (size_t i = 0, cnt = labels.GetCount(); i < cnt; i++) { diff --git a/src/commands/CommandManager.h b/src/commands/CommandManager.h index 86153de7e..0671bad88 100644 --- a/src/commands/CommandManager.h +++ b/src/commands/CommandManager.h @@ -90,21 +90,25 @@ class AUDACITY_DLL_API CommandManager: public XMLTagHandler // Creating menus and adding commands // - wxMenuBar *AddMenuBar(wxString sMenu); + wxMenuBar *AddMenuBar(const wxString & sMenu); - void BeginMenu(wxString tName); + void BeginMenu(const wxString & tName); void EndMenu(); - wxMenu* BeginSubMenu(wxString tName); + wxMenu* BeginSubMenu(const wxString & tName); void EndSubMenu(); void SetToMenu( wxMenu * menu ){ mCurrentMenu = menu; }; - void InsertItem(wxString name, wxString label, CommandFunctor *callback, - wxString after, int checkmark = -1); + void InsertItem(const wxString & name, + const wxString & label, + CommandFunctor *callback, + const wxString & after, + int checkmark = -1); - void AddItemList(wxString name, wxArrayString labels, + void AddItemList(const wxString & name, + const wxArrayString & labels, CommandFunctor *callback); void AddCheck(const wxChar *name, @@ -267,7 +271,7 @@ protected: // wxMenuBar * CurrentMenuBar() const; - wxMenuBar * GetMenuBar(wxString sMenu) const; + wxMenuBar * GetMenuBar(const wxString & sMenu) const; wxMenu * CurrentSubMenu() const; wxMenu * CurrentMenu() const; wxString GetLabel(const CommandListEntry *entry) const;