]> git.saurik.com Git - wxWidgets.git/commitdiff
re-added support for help-menu and application-menu items
authorStefan Csomor <csomor@advancedconcepts.ch>
Wed, 2 Nov 2005 14:50:10 +0000 (14:50 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Wed, 2 Nov 2005 14:50:10 +0000 (14:50 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36059 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/mac/carbon/app.cpp

index deef92ad8a2e37fa0a58fd66d664e7a9f31d3a66..4bd1eea596e530f47242b3bf7b3be26ce7043166 100644 (file)
@@ -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 ;
+            }
         }
     }