#endif
wxBEGIN_PROPERTIES_TABLE(wxMenu)
-wxEVENT_PROPERTY( Select, wxEVT_COMMAND_MENU_SELECTED, wxCommandEvent)
+wxEVENT_PROPERTY( Select, wxEVT_MENU, wxCommandEvent)
wxPROPERTY( Title, wxString, SetTitle, GetTitle, wxString(), \
0 /*flags*/, wxT("Helpstring"), wxT("group") )
bool wxMenuBase::SendEvent(int itemid, int checked)
{
- wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED, itemid);
+ wxCommandEvent event(wxEVT_MENU, itemid);
event.SetEventObject(this);
event.SetInt(checked);
- bool processed = false;
+ wxWindow* const win = GetWindow();
+ wxMenuBar* const mb = GetMenuBar();
// Try the menu's event handler first
wxEvtHandler *handler = GetEventHandler();
if ( handler )
- processed = handler->SafelyProcessEvent(event);
-
- // Try the window the menu was popped up from or its menu bar belongs to
- if ( !processed )
{
- wxWindow * const win = GetWindow();
- if ( win )
- processed = win->HandleWindowEvent(event);
+ // Indicate to the event processing code that we're going to pass this
+ // event to another handler if it's not processed here to prevent it
+ // from passing the event to wxTheApp: this will be done below if we do
+ // have the associated window.
+ if ( win || mb )
+ event.SetWillBeProcessedAgain();
+
+ if ( handler->SafelyProcessEvent(event) )
+ return true;
}
- return processed;
+ // If this menu is part of the menu bar, process the event there: this will
+ // also propagate it upwards to the window containing the menu bar.
+ if ( mb )
+ return mb->HandleWindowEvent(event);
+
+ // Try the window the menu was popped up from.
+ if ( win )
+ return win->HandleWindowEvent(event);
+
+ // Not processed.
+ return false;
}
// ----------------------------------------------------------------------------
{
wxASSERT_MSG( !IsAttached(), wxT("menubar already attached!") );
+ SetParent(frame);
m_menuBarFrame = frame;
}
wxASSERT_MSG( IsAttached(), wxT("detaching unattached menubar") );
m_menuBarFrame = NULL;
+ SetParent(NULL);
}
// ----------------------------------------------------------------------------