]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/carbon/menu.cpp
use correct scale when drawing
[wxWidgets.git] / src / osx / carbon / menu.cpp
index 3b258bba5cab7ff9768c30f35011f6fbe9d6378b..76f34d84e0b790435c17b9321b53a9717df5cc4e 100644 (file)
@@ -56,7 +56,7 @@ public :
         MenuItemIndex i = FindMenuItemIndex() ;
         if ( i > 0 )
         {
-            if ( bitmap.Ok() )
+            if ( bitmap.IsOk() )
             {
 #if wxUSE_BMPBUTTON
                 ControlButtonContentInfo info ;
@@ -151,7 +151,7 @@ public :
     {
         m_parentMenuRef = parentMenuRef;
         if ( m_parentMenuRef && index > 0 )
-            SetMenuItemRefCon( m_parentMenuRef, index, (URefCon) this );
+            SetMenuItemRefCon( m_parentMenuRef, index, (URefCon) m_peer );
     }
 
     MenuItemIndex FindMenuItemIndex()
@@ -163,7 +163,7 @@ public :
             {
                 URefCon storedRef = 0;
                 GetMenuItemRefCon(m_parentMenuRef, i, &storedRef );
-                if ( storedRef == (URefCon) this )
+                if ( storedRef == (URefCon) m_peer )
                 {
                     hit = i;
                     break;
@@ -183,7 +183,8 @@ protected :
 class wxMenuCarbonImpl : public wxMenuImpl
 {
 public :
-    wxMenuCarbonImpl( wxMenu* peer , MenuRef menu) : wxMenuImpl(peer), m_osxMenu(menu)
+    wxMenuCarbonImpl( wxMenu* peer , MenuRef menu , MenuRef oldMenu , SInt16 menuId)
+        : wxMenuImpl(peer), m_osxMenu(menu), m_oldMenuRef(oldMenu), m_menuId(menuId)
     {
     }
 
@@ -280,6 +281,8 @@ public :
     static wxMenuImpl* CreateRootMenu( wxMenu* peer );
 protected :
     wxCFRef<MenuRef> m_osxMenu;
+    MenuRef m_oldMenuRef;
+    SInt16 m_menuId;
 } ;
 
 // static const short kwxMacAppleMenuId = 1 ;
@@ -325,21 +328,35 @@ void wxRemoveMacMenuAssociation(wxMenu *menu)
 wxMenuCarbonImpl::~wxMenuCarbonImpl()
 {
     wxRemoveMacMenuAssociation( GetWXPeer() );
+    // restore previous menu
+    m_osxMenu.reset();
+    if ( m_menuId > 0 )
+        MacDeleteMenu(m_menuId);
+    if ( m_oldMenuRef )
+        MacInsertMenu(m_oldMenuRef, -1);
 }
 
 wxMenuImpl* wxMenuImpl::Create( wxMenu* peer, const wxString& title )
 {
     // create the menu
     static SInt16 s_macNextMenuId = 3;
+    SInt16 menuId = s_macNextMenuId++;
+    // save existing menu in case we're embedding into an application
+    // or sharing outside UI elements.
+    WXHMENU oldMenu = GetMenuHandle(menuId);
+    if ( oldMenu )
+        MacDeleteMenu(menuId);
     WXHMENU menu = NULL;
-    CreateNewMenu( s_macNextMenuId++ , 0 , &menu ) ;
+    CreateNewMenu( menuId , 0 , &menu ) ;
     if ( !menu )
     {
         wxLogLastError(wxT("CreateNewMenu failed"));
+        if ( oldMenu )
+            MacInsertMenu(oldMenu, -1);
         return NULL;
     }
 
-    wxMenuImpl* c = new wxMenuCarbonImpl( peer, menu );
+    wxMenuImpl* c = new wxMenuCarbonImpl( peer, menu, oldMenu, menuId );
     c->SetTitle(title);
     wxAssociateMenuWithMacMenu( menu , peer ) ;
     return c;