wxPopupMenuWindow instead, and wxPopupTranientWindow::OnIdle also now disables
the capture when the cursor is inside the popup, so override that too.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@34060
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
// called when a submenu is dismissed
void OnSubmenuDismiss(bool dismissParent);
// called when a submenu is dismissed
void OnSubmenuDismiss(bool dismissParent);
+ // the default wxMSW wxPopupTransientWindow::OnIdle disables the capture
+ // when the cursor is inside the popup, which dsables the menu tracking
+ // so override it to do nothing
+#ifdef __WXMSW__
+ void OnIdle(wxIdleEvent& event) { }
+#endif
+
// get the currently selected item (may be NULL)
wxMenuItem *GetCurrentItem() const
{
// get the currently selected item (may be NULL)
wxMenuItem *GetCurrentItem() const
{
EVT_LEFT_UP(wxPopupMenuWindow::OnLeftUp)
EVT_MOTION(wxPopupMenuWindow::OnMouseMove)
EVT_LEAVE_WINDOW(wxPopupMenuWindow::OnMouseLeave)
EVT_LEFT_UP(wxPopupMenuWindow::OnLeftUp)
EVT_MOTION(wxPopupMenuWindow::OnMouseMove)
EVT_LEAVE_WINDOW(wxPopupMenuWindow::OnMouseLeave)
+#ifdef __WXMSW__
+ EVT_IDLE(wxPopupMenuWindow::OnIdle)
+#endif
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxMenuBar, wxMenuBarBase)
END_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxMenuBar, wxMenuBarBase)
wxPopupTransientWindow::Popup(focus);
wxPopupTransientWindow::Popup(focus);
+ // the base class no-longer captures the mouse automatically when Popup
+ // is called, so do it here to allow the menu tracking to work
+ if ( !HasCapture() )
+ CaptureMouse();
+
#ifdef __WXMSW__
// ensure that this window is really on top of everything: without using
// SetWindowPos() it can be covered by its parent menu which is not
#ifdef __WXMSW__
// ensure that this window is really on top of everything: without using
// SetWindowPos() it can be covered by its parent menu which is not