return menuOld;
}
+static wxMenu *CopyMenu (wxMenu *menu)
+{
+ wxMenu *menucopy = new wxMenu ();
+ wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
+ while (node)
+ {
+ wxMenuItem *item = node->GetData();
+ int itemid = item->GetId();
+ wxString text = item->GetText();
+ text.Replace(wxT("_"), wxT("&"));
+ wxMenu *submenu = item->GetSubMenu();
+ if (!submenu)
+ {
+ wxMenuItem* itemcopy = new wxMenuItem(menucopy,
+ itemid, text,
+ menu->GetHelpString(itemid));
+ itemcopy->SetBitmap(item->GetBitmap());
+ itemcopy->SetCheckable(item->IsCheckable());
+ menucopy->Append(itemcopy);
+ }
+ else
+ menucopy->Append (itemid, text, CopyMenu(submenu),
+ menu->GetHelpString(itemid));
+
+ node = node->GetNext();
+ }
+
+ return menucopy;
+}
+
wxMenu *wxMenuBar::Remove(size_t pos)
{
wxMenu *menu = wxMenuBarBase::Remove(pos);
printf( "menu shell entries before %d\n", (int)g_list_length( menu_shell->children ) );
*/
+ wxMenu *menucopy = CopyMenu( menu );
+
// unparent calls unref() and that would delete the widget so we raise
// the ref count to 2 artificially before invoking unparent.
gtk_widget_ref( menu->m_menu );
gtk_widget_unparent( menu->m_menu );
gtk_widget_destroy( menu->m_owner );
+ delete menu;
+ menu = menucopy;
/*
printf( "factory entries after %d\n", (int)g_slist_length(m_factory->items) );
printf( "menu shell entries after %d\n", (int)g_list_length( menu_shell->children ) );
int wxMenu::FindMenuIdByMenuItem( GtkWidget *menuItem ) const
{
- wxNode *node = m_items.First();
+ wxMenuItemList::Node *node = m_items.GetFirst();
while (node)
{
- wxMenuItem *item = (wxMenuItem*)node->Data();
+ wxMenuItem *item = node->GetData();
if (item->GetMenuItem() == menuItem)
return item->GetId();
- node = node->Next();
+ node = node->GetNext();
}
return wxNOT_FOUND;