]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/menu.cpp
check for LVS_OWNERDATA availability at compile and run-time
[wxWidgets.git] / src / univ / menu.cpp
index 0c9f850aa530e0594db68d23b9e63cce33e54e13..1d819ad0fecbf2da21dc492c360fc268efe9f980 100644 (file)
@@ -5,7 +5,7 @@
 // Modified by:
 // Created:     25.08.00
 // RCS-ID:      $Id$
 // Modified by:
 // Created:     25.08.00
 // RCS-ID:      $Id$
-// Copyright:   (c) 2000 Vadim Zeitlin
+// Copyright:   (c) 2000 SciTech Software, Inc. (www.scitechsoft.com)
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
@@ -41,6 +41,8 @@
 
 #include "wx/popupwin.h"
 #include "wx/evtloop.h"
 
 #include "wx/popupwin.h"
 #include "wx/evtloop.h"
+#include "wx/dcclient.h"
+#include "wx/frame.h"
 
 #include "wx/univ/renderer.h"
 
 
 #include "wx/univ/renderer.h"
 
@@ -599,10 +601,12 @@ void wxPopupMenuWindow::ClickItem(wxMenuItem *item)
     wxASSERT_MSG( !item->IsSeparator() && !item->IsSubMenu(),
                   _T("can't click this item") );
 
     wxASSERT_MSG( !item->IsSeparator() && !item->IsSubMenu(),
                   _T("can't click this item") );
 
-    m_menu->ClickItem(item);
+    wxMenu* menu = m_menu;
 
     // close all menus
     DismissAndNotify();
 
     // close all menus
     DismissAndNotify();
+    
+    menu->ClickItem(item);
 }
 
 void wxPopupMenuWindow::OpenSubmenu(wxMenuItem *item, InputMethod how)
 }
 
 void wxPopupMenuWindow::OpenSubmenu(wxMenuItem *item, InputMethod how)
@@ -1961,7 +1965,7 @@ bool wxMenuBar::ProcessMouseEvent(const wxPoint& pt)
 
     // show the menu if we know that we should, even if we hadn't been showing
     // it before (this may happen if the previous menu was disabled)
 
     // show the menu if we know that we should, even if we hadn't been showing
     // it before (this may happen if the previous menu was disabled)
-    if ( m_shouldShowMenu )
+    if ( m_shouldShowMenu && !m_menuShown)
     {
         // open the new menu if the old one we closed had been opened
         PopupCurrentMenu(FALSE /* don't select first item - as Windows does */);
     {
         // open the new menu if the old one we closed had been opened
         PopupCurrentMenu(FALSE /* don't select first item - as Windows does */);
@@ -2221,6 +2225,11 @@ void wxMenuBar::PopupCurrentMenu(bool selectFirst)
             // that we pass 0 as width to position the menu exactly below the
             // item, not to the right of it
             wxRect rectItem = GetItemRect(m_current);
             // that we pass 0 as width to position the menu exactly below the
             // item, not to the right of it
             wxRect rectItem = GetItemRect(m_current);
+
+           // Release mouse, because the menu will get the capture.
+           if (HasCapture())
+               ReleaseMouse();
+
             m_menuShown->Popup(ClientToScreen(rectItem.GetPosition()),
                                wxSize(0, rectItem.GetHeight()),
                                selectFirst);
             m_menuShown->Popup(ClientToScreen(rectItem.GetPosition()),
                                wxSize(0, rectItem.GetHeight()),
                                selectFirst);