void SelectItem (Menu menu, MenuItem item, bool execute)
{
MenuItem prev_item = CurrentMenu.SelectedItem;
if (prev_item != item.Parent) {
DeselectItem (prev_item);
if ((CurrentMenu != menu) && (prev_item.Parent != item) && (prev_item.Parent is MenuItem)) {
DeselectItem (prev_item.Parent as MenuItem);
}
}
if (CurrentMenu != menu)
CurrentMenu = menu;
item.Selected = true;
menu.InvalidateItem (item);
if (((CurrentMenu == TopMenu) && execute) || ((CurrentMenu != TopMenu) && popup_active))
item.PerformSelect ();
if ((execute) && ((prev_item == null) || (item != prev_item.Parent)))
ExecFocusedItem (menu, item);
}