From 6567c540f5bb4af70e62cf50a4ea3dd051c1fddd Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Wed, 2 Nov 2005 14:50:10 +0000 Subject: [PATCH] re-added support for help-menu and application-menu items git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/mac/carbon/app.cpp | 58 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 47 insertions(+), 11 deletions(-) diff --git a/src/mac/carbon/app.cpp b/src/mac/carbon/app.cpp index deef92ad8a..4bd1eea596 100644 --- a/src/mac/carbon/app.cpp +++ b/src/mac/carbon/app.cpp @@ -439,11 +439,23 @@ static pascal OSStatus wxMacAppCommandEventHandler( EventHandlerCallRef handler wxMenuItem* item = NULL ; MenuCommand id = command.commandID ; - // for items we don't really control - if ( id == kHICommandPreferences ) - { - id = wxApp::s_macPreferencesMenuItemId ; + // for 'standard' commands + if ( id == kHICommandPreferences || id == kHICommandQuit || id == kHICommandAbout ) + { + switch ( id ) + { + case kHICommandPreferences : + id = wxApp::s_macPreferencesMenuItemId ; + break ; + case kHICommandQuit : + id = wxApp::s_macExitMenuItemId ; + break ; + case kHICommandAbout : + id = wxApp::s_macAboutMenuItemId ; + break ; + } + wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar() ; if ( mbar ) { @@ -453,14 +465,38 @@ static pascal OSStatus wxMacAppCommandEventHandler( EventHandlerCallRef handler } else if ( id != 0 && command.menu.menuRef != 0 && command.menu.menuItemIndex != 0 ) { - wxMenu* itsMenu = NULL ; - UInt32 refCon ; - GetMenuItemRefCon( command.menu.menuRef , command.menu.menuItemIndex , &refCon ) ; - // make sure it is one of our own menus, otherwise don't touch - itsMenu = wxFindMenuFromMacMenu( command.menu.menuRef ) ; - if ( itsMenu != NULL ) + // make sure it is one of our own menus, or of the 'synthetic' apple and help menus , otherwise don't touch + MenuItemIndex firstUserHelpMenuItem ; + static MenuHandle mh = NULL ; + if ( mh == NULL ) { - item = (wxMenuItem*) refCon ; + if ( UMAGetHelpMenu( &mh , &firstUserHelpMenuItem) != noErr ) + { + mh = NULL ; + } + } + + // is it part of the application or the help menu, then look for the id directly + if ( ( GetMenuHandle( kwxMacAppleMenuId ) != NULL && command.menu.menuRef == GetMenuHandle( kwxMacAppleMenuId ) ) || + ( mh != NULL && command.menu.menuRef == mh ) ) + { + wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar() ; + if ( mbar ) + { + wxMenu* menu = NULL ; + item = mbar->FindItem( id , &menu ) ; + } + } + else + { + wxMenu* itsMenu = NULL ; + UInt32 refCon ; + GetMenuItemRefCon( command.menu.menuRef , command.menu.menuItemIndex , &refCon ) ; + itsMenu = wxFindMenuFromMacMenu( command.menu.menuRef ) ; + if ( itsMenu != NULL ) + { + item = (wxMenuItem*) refCon ; + } } } -- 2.45.2