#endif
// the (popup) menu title has this special id
-static const int idMenuTitle = -2;
+static const int idMenuTitle = -3;
static MenuItemIndex firstUserHelpMenuItem = 0 ;
const short kwxMacMenuBarResource = 1 ;
const short kwxMacAppleMenuId = 1 ;
+
+// Find an item given the Macintosh Menu Reference
+
+wxList wxWinMacMenuList(wxKEY_INTEGER);
+wxMenu *wxFindMenuFromMacMenu(MenuRef inMenuRef)
+{
+ wxNode *node = wxWinMacMenuList.Find((long)inMenuRef);
+ if (!node)
+ return NULL;
+ return (wxMenu *)node->GetData();
+}
+
+void wxAssociateMenuWithMacMenu(MenuRef inMenuRef, wxMenu *menu) ;
+void wxAssociateMenuWithMacMenu(MenuRef inMenuRef, wxMenu *menu)
+{
+ // adding NULL MenuRef is (first) surely a result of an error and
+ // (secondly) breaks menu command processing
+ wxCHECK_RET( inMenuRef != (MenuRef) NULL, wxT("attempt to add a NULL MenuRef to menu list") );
+
+ if ( !wxWinMacMenuList.Find((long)inMenuRef) )
+ wxWinMacMenuList.Append((long)inMenuRef, menu);
+}
+
+void wxRemoveMacMenuAssociation(wxMenu *menu) ;
+void wxRemoveMacMenuAssociation(wxMenu *menu)
+{
+ wxWinMacMenuList.DeleteObject(menu);
+}
+
+
// ============================================================================
// implementation
// ============================================================================
wxLogLastError(wxT("UMANewMenu failed"));
}
+ wxAssociateMenuWithMacMenu( (MenuRef)m_hMenu , this ) ;
+
// if we have a title, insert it in the beginning of the menu
if ( !!m_title )
{
wxMenu::~wxMenu()
{
+ wxRemoveMacMenuAssociation( this ) ;
if (MAC_WXHMENU(m_hMenu))
::DisposeMenu(MAC_WXHMENU(m_hMenu));
}
}
SetMenuItemCommandID( MAC_WXHMENU(m_hMenu) , pos , pItem->GetId() ) ;
+ SetMenuItemRefCon( MAC_WXHMENU(m_hMenu) , pos , (UInt32) pItem ) ;
pItem->UpdateItemText() ;
pItem->UpdateItemBitmap() ;
pItem->UpdateItemStatus() ;
if ( s_macInstalledMenuBar == this )
return ;
- wxStAppResource resload ;
-
MenuBarHandle menubar = NULL ;
#if TARGET_API_MAC_OSX
menubar = NewHandleClear( 6 /* sizeof( MenuBarHeader ) */ ) ;
verify_noerr( CreateNewMenu( kwxMacAppleMenuId , 0 , &appleMenu ) ) ;
verify_noerr( SetMenuTitle( appleMenu , (ConstStr255Param) appleMenuTitle ) );
+
+ // Add About/Preferences separator only on OS X
+ // KH/RN: Separator is always present on 10.3 but not on 10.2
+ // However, the change from 10.2 to 10.3 suggests it is preferred
+#if TARGET_API_MAC_OSX
+ MacInsertMenuItem( appleMenu , "\p-" , 0 ) ;
+#endif
+
MacInsertMenuItem( appleMenu , "\pAbout..." , 0 ) ;
MacInsertMenu( appleMenu , 0 ) ;
UMASetMenuItemText( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetText() , wxFont::GetDefaultEncoding() );
UMAEnableMenuItem( GetMenuHandle( kwxMacAppleMenuId ) , 1 , true );
SetMenuItemCommandID( GetMenuHandle( kwxMacAppleMenuId ) , 1 , item->GetId() ) ;
+ SetMenuItemRefCon(GetMenuHandle( kwxMacAppleMenuId ) , 1 , (UInt32)item ) ;
UMASetMenuItemShortcut( GetMenuHandle( kwxMacAppleMenuId ) , 1 , entry ) ;
}
else
{
UMAAppendMenuItem(mh, item->GetText() , wxFont::GetDefaultEncoding(), entry);
SetMenuItemCommandID( mh , CountMenuItems(mh) , item->GetId() ) ;
+ SetMenuItemRefCon( mh , CountMenuItems(mh) , (UInt32)item ) ;
}
}