]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/menu.cpp
check that the version of __sync_sub_and_fetch that returns a value is supported...
[wxWidgets.git] / src / msw / menu.cpp
index 27ccbc0fb8d453cb0ee84a7f0f0e66a954908b47..4c4383e467dfed0c9180304a8345922bef490ba2 100644 (file)
@@ -97,7 +97,7 @@ typedef struct tagMENUINFO
 // ----------------------------------------------------------------------------
 
 // the (popup) menu title has this special id
 // ----------------------------------------------------------------------------
 
 // the (popup) menu title has this special id
-static const int idMenuTitle = -3;
+static const UINT idMenuTitle = (UINT)-3;
 
 // ----------------------------------------------------------------------------
 // private functions
 
 // ----------------------------------------------------------------------------
 // private functions
@@ -261,9 +261,15 @@ void wxMenu::Init()
 // The wxWindow destructor will take care of deleting the submenus.
 wxMenu::~wxMenu()
 {
 // The wxWindow destructor will take care of deleting the submenus.
 wxMenu::~wxMenu()
 {
-    if ( !::DestroyMenu(GetHmenu()) )
+    // we should free Windows resources only if Windows doesn't do it for us
+    // which happens if we're attached to a menubar or a submenu of another
+    // menu
+    if ( !IsAttached() && !GetParent() )
     {
     {
-        wxLogLastError(wxT("DestroyMenu"));
+        if ( !::DestroyMenu(GetHmenu()) )
+        {
+            wxLogLastError(wxT("DestroyMenu"));
+        }
     }
 
 #if wxUSE_ACCEL
     }
 
 #if wxUSE_ACCEL
@@ -393,7 +399,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
         flags |= MF_POPUP;
     }
     else {
         flags |= MF_POPUP;
     }
     else {
-        id = pItem->GetId();
+        id = pItem->GetMSWId();
     }
 
 
     }
 
 
@@ -558,7 +564,7 @@ bool wxMenu::DoInsertOrAppend(wxMenuItem *pItem, size_t pos)
 
 
     // if we just appended the title, highlight it
 
 
     // if we just appended the title, highlight it
-    if ( (int)id == idMenuTitle )
+    if ( id == idMenuTitle )
     {
         // visually select the menu title
         SetDefaultMenuItem(GetHmenu(), id);
     {
         // visually select the menu title
         SetDefaultMenuItem(GetHmenu(), id);
@@ -725,7 +731,7 @@ void wxMenu::SetTitle(const wxString& label)
         if ( !label.empty() )
         {
             if ( !::InsertMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING,
         if ( !label.empty() )
         {
             if ( !::InsertMenu(hMenu, 0u, MF_BYPOSITION | MF_STRING,
-                               (unsigned)idMenuTitle, m_title.wx_str()) ||
+                               idMenuTitle, m_title.wx_str()) ||
                  !::InsertMenu(hMenu, 1u, MF_BYPOSITION, (unsigned)-1, NULL) )
             {
                 wxLogLastError(wxT("InsertMenu"));
                  !::InsertMenu(hMenu, 1u, MF_BYPOSITION, (unsigned)-1, NULL) )
             {
                 wxLogLastError(wxT("InsertMenu"));
@@ -761,7 +767,7 @@ void wxMenu::SetTitle(const wxString& label)
 #else
             if ( !ModifyMenu(hMenu, 0u,
                              MF_BYPOSITION | MF_STRING,
 #else
             if ( !ModifyMenu(hMenu, 0u,
                              MF_BYPOSITION | MF_STRING,
-                             (unsigned)idMenuTitle, m_title.wx_str()) )
+                             idMenuTitle, m_title.wx_str()) )
             {
                 wxLogLastError(wxT("ModifyMenu"));
             }
             {
                 wxLogLastError(wxT("ModifyMenu"));
             }
@@ -773,7 +779,7 @@ void wxMenu::SetTitle(const wxString& label)
     // put the title string in bold face
     if ( !m_title.empty() )
     {
     // put the title string in bold face
     if ( !m_title.empty() )
     {
-        SetDefaultMenuItem(GetHmenu(), (UINT)idMenuTitle);
+        SetDefaultMenuItem(GetHmenu(), idMenuTitle);
     }
 #endif // Win32
 }
     }
 #endif // Win32
 }
@@ -874,8 +880,9 @@ wxMenuBar::~wxMenuBar()
             toolMenuBar->SetMenuBar(NULL);
     }
 #else
             toolMenuBar->SetMenuBar(NULL);
     }
 #else
-
-    if ( m_hMenu )
+    // we should free Windows resources only if Windows doesn't do it for us
+    // which happens if we're attached to a frame
+    if (m_hMenu && !IsAttached())
     {
 #if defined(WINCE_WITH_COMMANDBAR)
         ::DestroyWindow((HWND) m_commandBar);
     {
 #if defined(WINCE_WITH_COMMANDBAR)
         ::DestroyWindow((HWND) m_commandBar);