X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a9c35d32c6b14da5107db8b07bb17f540c94229..594d5596eec6704cb801b64cd397f95fe5d29b14:/src/mac/carbon/menu.cpp diff --git a/src/mac/carbon/menu.cpp b/src/mac/carbon/menu.cpp index 860ec771f7..f3806a6a49 100644 --- a/src/mac/carbon/menu.cpp +++ b/src/mac/carbon/menu.cpp @@ -465,14 +465,12 @@ void wxMenu::MacBeforeDisplay( bool isSubMenu ) } else // normal item { -#if TARGET_CARBON // what we do here is to hide the special items which are // shown in the application menu anyhow -- it doesn't make // sense to show them in their normal place as well if ( item->GetId() == wxApp::s_macAboutMenuItemId || - ( UMAGetSystemVersion() >= 0x1000 && ( item->GetId() == wxApp::s_macPreferencesMenuItemId || - item->GetId() == wxApp::s_macExitMenuItemId ) ) ) + item->GetId() == wxApp::s_macExitMenuItemId ) { ChangeMenuItemAttributes( MAC_WXHMENU( GetHMenu() ), @@ -520,7 +518,6 @@ void wxMenu::MacBeforeDisplay( bool isSubMenu ) 0 ); } } -#endif // TARGET_CARBON } previousItem = item ; @@ -554,6 +551,82 @@ void wxMenu::MacAfterDisplay( bool isSubMenu ) } } +wxInt32 wxMenu::MacHandleCommandProcess( wxMenuItem* item, int id, wxWindow* targetWindow ) +{ + OSStatus result = eventNotHandledErr ; + if (item->IsCheckable()) + item->Check( !item->IsChecked() ) ; + + if ( SendEvent( id , item->IsCheckable() ? item->IsChecked() : -1 ) ) + result = noErr ; + else + { + if ( targetWindow != NULL ) + { + wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED , id); + event.SetEventObject(targetWindow); + event.SetInt(item->IsCheckable() ? item->IsChecked() : -1); + + if ( targetWindow->GetEventHandler()->ProcessEvent(event) ) + result = noErr ; + } + } + return result; +} + +wxInt32 wxMenu::MacHandleCommandUpdateStatus( wxMenuItem* item, int id, wxWindow* targetWindow ) +{ + OSStatus result = eventNotHandledErr ; + wxUpdateUIEvent event(id); + event.SetEventObject( this ); + + bool processed = false; + + // Try the menu's event handler + { + wxEvtHandler *handler = GetEventHandler(); + if ( handler ) + processed = handler->ProcessEvent(event); + } + + // Try the window the menu was popped up from + // (and up through the hierarchy) + if ( !processed ) + { + const wxMenuBase *menu = this; + while ( menu ) + { + wxWindow *win = menu->GetInvokingWindow(); + if ( win ) + { + processed = win->GetEventHandler()->ProcessEvent(event); + break; + } + + menu = menu->GetParent(); + } + } + + if ( !processed && targetWindow != NULL) + { + processed = targetWindow->GetEventHandler()->ProcessEvent(event); + } + + if ( processed ) + { + // if anything changed, update the changed attribute + if (event.GetSetText()) + SetLabel(id, event.GetText()); + if (event.GetSetChecked()) + Check(id, event.GetChecked()); + if (event.GetSetEnabled()) + Enable(id, event.GetEnabled()); + + result = noErr ; + } + return result; +} + // Menu Bar /* @@ -675,8 +748,7 @@ void wxMenuBar::MacInstallMenuBar() helpMenuHandle = NULL ; } -#if TARGET_CARBON - if ( UMAGetSystemVersion() >= 0x1000 && wxApp::s_macPreferencesMenuItemId) + if ( wxApp::s_macPreferencesMenuItemId) { wxMenuItem *item = FindItem( wxApp::s_macPreferencesMenuItemId , NULL ) ; if ( item == NULL || !(item->IsEnabled()) ) @@ -689,7 +761,7 @@ void wxMenuBar::MacInstallMenuBar() // enabled unless it is added by the application and then disabled, otherwise // a program would be required to add an item with wxID_EXIT in order to get the // Quit menu item to be enabled, which seems a bit burdensome. - if ( UMAGetSystemVersion() >= 0x1000 && wxApp::s_macExitMenuItemId) + if ( wxApp::s_macExitMenuItemId) { wxMenuItem *item = FindItem( wxApp::s_macExitMenuItemId , NULL ) ; if ( item != NULL && !(item->IsEnabled()) ) @@ -697,7 +769,6 @@ void wxMenuBar::MacInstallMenuBar() else EnableMenuCommand( NULL , kHICommandQuit ) ; } -#endif wxString strippedHelpMenuTitle = wxStripMenuCodes( wxApp::s_macHelpMenuTitleName ) ; wxString strippedTranslatedHelpMenuTitle = wxStripMenuCodes( wxString( _("&Help") ) ) ;