/* static */ bool wxMenuBase::DoProcessEvent(wxMenuBase* menu, wxEvent& event, wxWindow* win) { event.SetEventObject(menu); wxMenuBar* const mb = menu ? menu->GetMenuBar() : NULL; // Process event in the menu itself and all its parent menus, if it's a // submenu, first. for ( ; menu; menu = menu->GetParent() ) { wxEvtHandler *handler = menu->GetEventHandler(); if ( handler ) { // 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; } } // If this menu is part of the menu bar, try the event there. if ( mb ) { if ( mb->HandleWindowEvent(event) ) return true; // If this already propagated it upwards to the window containing // the menu bar, we don't have to handle it in this window again // below. if ( event.ShouldPropagate() ) return false; } // Try the window the menu was popped up from. if ( win ) return win->HandleWindowEvent(event); // Not processed. return false; }