wxPopupTransientWindow::Popup no longer captures the mouse, so do it in
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
This commit is contained in:
@@ -138,6 +138,13 @@ public:
|
|||||||
// called when a submenu is dismissed
|
// called when a submenu is dismissed
|
||||||
void OnSubmenuDismiss(bool dismissParent);
|
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)
|
// get the currently selected item (may be NULL)
|
||||||
wxMenuItem *GetCurrentItem() const
|
wxMenuItem *GetCurrentItem() const
|
||||||
{
|
{
|
||||||
@@ -282,6 +289,9 @@ BEGIN_EVENT_TABLE(wxPopupMenuWindow, wxPopupTransientWindow)
|
|||||||
EVT_LEFT_UP(wxPopupMenuWindow::OnLeftUp)
|
EVT_LEFT_UP(wxPopupMenuWindow::OnLeftUp)
|
||||||
EVT_MOTION(wxPopupMenuWindow::OnMouseMove)
|
EVT_MOTION(wxPopupMenuWindow::OnMouseMove)
|
||||||
EVT_LEAVE_WINDOW(wxPopupMenuWindow::OnMouseLeave)
|
EVT_LEAVE_WINDOW(wxPopupMenuWindow::OnMouseLeave)
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
EVT_IDLE(wxPopupMenuWindow::OnIdle)
|
||||||
|
#endif
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE(wxMenuBar, wxMenuBarBase)
|
BEGIN_EVENT_TABLE(wxMenuBar, wxMenuBarBase)
|
||||||
@@ -428,6 +438,11 @@ void wxPopupMenuWindow::Popup(wxWindow *focus)
|
|||||||
|
|
||||||
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__
|
#ifdef __WXMSW__
|
||||||
// ensure that this window is really on top of everything: without using
|
// ensure that this window is really on top of everything: without using
|
||||||
// SetWindowPos() it can be covered by its parent menu which is not
|
// SetWindowPos() it can be covered by its parent menu which is not
|
||||||
|
Reference in New Issue
Block a user