Use wxMenuBase:SendEvent() to emit event, shoudl also fix #801: Menu cmd events: Inconsistent GetEventObject()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54313 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
57b2bba406
commit
e98c065545
@ -488,36 +488,10 @@ static void menuitem_activate(GtkWidget*, wxMenuItem* item)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Is this menu on a menubar? (possibly nested)
|
||||
wxMenu* menu = item->GetMenu();
|
||||
wxFrame* frame = NULL;
|
||||
if(menu->IsAttached())
|
||||
frame = menu->GetMenuBar()->GetFrame();
|
||||
|
||||
// FIXME: why do we have to call wxFrame::GetEventHandler() directly here?
|
||||
// normally wxMenu::SendEvent() should be enough, if it doesn't work
|
||||
// in wxGTK then we have a bug in wxMenu::GetInvokingWindow() which
|
||||
// should be fixed instead of working around it here...
|
||||
if (frame)
|
||||
{
|
||||
// If it is attached then let the frame send the event.
|
||||
// Don't call frame->ProcessCommand(id) because it toggles
|
||||
// checkable items and we've already done that above.
|
||||
wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, id);
|
||||
commandEvent.SetEventObject(frame);
|
||||
if (item->IsCheckable())
|
||||
commandEvent.SetInt(item->IsChecked());
|
||||
|
||||
frame->HandleWindowEvent(commandEvent);
|
||||
}
|
||||
else
|
||||
{
|
||||
// otherwise let the menu have it
|
||||
menu->SendEvent(id, item->IsCheckable() ? item->IsChecked() : -1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// "select"
|
||||
|
Loading…
Reference in New Issue
Block a user