diff --git a/include/wx/menu.h b/include/wx/menu.h index c341e5f2d1..9e980665e6 100644 --- a/include/wx/menu.h +++ b/include/wx/menu.h @@ -388,6 +388,12 @@ protected: static bool ms_locked; + +private: + // Helper of SendEvent(): sends the event to its intended recipients, + // returns true if it was processed. + static bool DoProcessEvent(wxMenuBase* menu, wxEvent& event, wxWindow* win); + wxDECLARE_NO_COPY_CLASS(wxMenuBase); }; diff --git a/src/common/menucmn.cpp b/src/common/menucmn.cpp index b9be6fa851..ca8f1f57a2 100644 --- a/src/common/menucmn.cpp +++ b/src/common/menucmn.cpp @@ -641,14 +641,20 @@ void wxMenuBase::UpdateUI(wxEvtHandler* source) bool wxMenuBase::SendEvent(int itemid, int checked) { wxCommandEvent event(wxEVT_MENU, itemid); - event.SetEventObject(this); event.SetInt(checked); - wxWindow* const win = GetWindow(); - wxMenuBar* const mb = GetMenuBar(); + return DoProcessEvent(this, event, GetWindow()); +} + +/* static */ +bool wxMenuBase::DoProcessEvent(wxMenuBase* menu, wxEvent& event, wxWindow* win) +{ + event.SetEventObject(menu); + + wxMenuBar* const mb = menu->GetMenuBar(); // Try the menu's event handler first - wxEvtHandler *handler = GetEventHandler(); + wxEvtHandler *handler = menu->GetEventHandler(); if ( handler ) { // Indicate to the event processing code that we're going to pass this