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:
parent
3143083e9c
commit
ed5903b61b
@ -138,6 +138,13 @@ public:
|
||||
// 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
|
||||
{
|
||||
@ -282,6 +289,9 @@ BEGIN_EVENT_TABLE(wxPopupMenuWindow, wxPopupTransientWindow)
|
||||
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)
|
||||
@ -428,6 +438,11 @@ void wxPopupMenuWindow::Popup(wxWindow *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
|
||||
|
Loading…
Reference in New Issue
Block a user