git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4300 
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
12 files changed:
 
     // TODO: virtual void SetTitle(const wxString& title);
 
 
     // TODO: virtual void SetTitle(const wxString& title);
 
-#ifdef WXWIN_COMPATIBILITY
     wxMenu(const wxString& title, const wxFunction func)
         : wxMenuBase(title)
     {
     wxMenu(const wxString& title, const wxFunction func)
         : wxMenuBase(title)
     {
 
 
     // TODO: virtual void SetTitle(const wxString& title);
 
 
     // TODO: virtual void SetTitle(const wxString& title);
 
-#ifdef WXWIN_COMPATIBILITY
     wxMenu(const wxString& title, const wxFunction func)
         : wxMenuBase(title)
     {
     wxMenu(const wxString& title, const wxFunction func)
         : wxMenuBase(title)
     {
 
     wxFunction m_callback;
 #endif // WXWIN_COMPATIBILITY
 
     wxFunction m_callback;
 #endif // WXWIN_COMPATIBILITY
 
+    // unlike FindItem(), this function doesn't recurse but only looks through
+    // our direct children and also may return the index of the found child if
+    // pos != NULL
+    wxMenuItem *FindChildItem(int id, size_t *pos = NULL) const;
+
 protected:
     // virtuals to override in derived classes
     // ---------------------------------------
 protected:
     // virtuals to override in derived classes
     // ---------------------------------------
     // common part of all ctors
     void Init(long style);
 
     // common part of all ctors
     void Init(long style);
 
-    // unlike FindItem(), this function doesn't recurse but only looks through
-    // our direct children and also may return the index of the found child if
-    // pos != NULL
-    wxMenuItem *FindChildItem(int id, size_t *pos = NULL) const;
-
 protected:
     wxMenuBar     *m_menuBar;           // menubar we belong to or NULL
     wxMenu        *m_menuParent;        // parent menu or NULL
 protected:
     wxMenuBar     *m_menuBar;           // menubar we belong to or NULL
     wxMenu        *m_menuParent;        // parent menu or NULL
 
--- /dev/null
+#
+# File:                makefile.unx
+# Author:      Julian Smart
+# Created:     1998
+# Updated:     
+# Copyright:   (c) 1998 Julian Smart
+#
+# "%W% %G%"
+#
+# Makefile for minimal example (UNIX).
+
+top_srcdir = @top_srcdir@
+top_builddir = ../..
+program_dir = samples/menu
+
+PROGRAM=menu
+
+OBJECTS=$(PROGRAM).o
+
+include ../../src/makeprog.env
+
 
 
 void MyFrame::OnAppendMenu(wxCommandEvent& WXUNUSED(event))
 {
 
 void MyFrame::OnAppendMenu(wxCommandEvent& WXUNUSED(event))
 {
+    static int s_count = 0;
 
     wxString title;
     title.Printf("Dummy menu &%d", ++s_count);
 
     wxString title;
     title.Printf("Dummy menu &%d", ++s_count);
     size_t count = mbar->GetMenuCount();
 
     wxLogMessage("The label of the last menu item is '%s'",
     size_t count = mbar->GetMenuCount();
 
     wxLogMessage("The label of the last menu item is '%s'",
-                 mbar->GetLabelTop(count - 1));
+                 mbar->GetLabelTop(count - 1).c_str());
 }
 
 void MyFrame::OnSetLabelMenu(wxCommandEvent& WXUNUSED(event))
 }
 
 void MyFrame::OnSetLabelMenu(wxCommandEvent& WXUNUSED(event))
     if ( item )
     {
         wxLogMessage("The label of the last menu item is '%s'",
     if ( item )
     {
         wxLogMessage("The label of the last menu item is '%s'",
+                     item->GetLabel().c_str());
 
-        *ppos = item ? pos : wxNOT_FOUND;
+        *ppos = item ? pos : (size_t)wxNOT_FOUND;
 
     wxMenuBar *bar = GetMenuBar();
     if (!bar) return;
 
     wxMenuBar *bar = GetMenuBar();
     if (!bar) return;
 
-    wxMenuItem *item = bar->FindItemForId(id) ;
+    wxMenuItem *item = bar->FindItem(id) ;
     if (item && item->IsCheckable())
     {
     if (item && item->IsCheckable())
     {
-        bar->Check(id,!bar->Checked(id)) ;
+        bar->Check(id, !bar->IsChecked(id)) ;
     }
 
     wxEvtHandler* evtHandler = GetEventHandler();
     }
 
     wxEvtHandler* evtHandler = GetEventHandler();
 
     gtk_accel_group_detach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_detach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
             wxMenubarUnsetInvokingWindow( menuitem->GetSubMenu(), win );
         if (menuitem->IsSubMenu())
             wxMenubarUnsetInvokingWindow( menuitem->GetSubMenu(), win );
+        node = node->GetNext();
     gtk_accel_group_attach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_attach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
             wxMenubarSetInvokingWindow( menuitem->GetSubMenu(), win );
         if (menuitem->IsSubMenu())
             wxMenubarSetInvokingWindow( menuitem->GetSubMenu(), win );
+        node = node->GetNext();
     gtk_accel_group_attach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_attach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         wxMenubarSetInvokingWindow( menu, win );
         wxMenubarSetInvokingWindow( menu, win );
+        node = node->GetNext();
     gtk_accel_group_detach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_detach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         wxMenubarUnsetInvokingWindow( menu, win );
         wxMenubarUnsetInvokingWindow( menu, win );
+        node = node->GetNext();
-    wxNode *node = ((wxMenu *)menu)->GetItems().First();    // const_cast
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *item = (wxMenuItem*)node->Data();
+        wxMenuItem *item = node->GetData();
         if (item->IsSubMenu())
             return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
 
         if (item->IsSubMenu())
             return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
 
+        node = node->GetNext();
 
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
 
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         int res = FindMenuItemRecursive( menu, menuString, itemString);
         int res = FindMenuItemRecursive( menu, menuString, itemString);
-        if (res != -1) return res;
-        node = node->Next();
+        if (res != -1)
+            return res;
+        node = node->GetNext();
 }
 
 // Find a wxMenuItem using its id. Recurses down into sub-menus
 }
 
 // Find a wxMenuItem using its id. Recurses down into sub-menus
 {
     wxMenuItem* result = menu->FindChildItem(id);
 
 {
     wxMenuItem* result = menu->FindChildItem(id);
 
-    wxNode *node = ((wxMenu *)menu)->GetItems().First(); // const_cast
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
     while ( node && result == NULL )
     {
     while ( node && result == NULL )
     {
-        wxMenuItem *item = (wxMenuItem*)node->Data();
+        wxMenuItem *item = node->GetData();
         if (item->IsSubMenu())
         {
             result = FindMenuItemByIdRecursive( item->GetSubMenu(), id );
         }
         if (item->IsSubMenu())
         {
             result = FindMenuItemByIdRecursive( item->GetSubMenu(), id );
         }
+        node = node->GetNext();
 wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 {
     wxMenuItem* result = 0;
 wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 {
     wxMenuItem* result = 0;
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
     while (node && result == 0)
     {
     while (node && result == 0)
     {
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         result = FindMenuItemByIdRecursive( menu, id );
         result = FindMenuItemByIdRecursive( menu, id );
+        node = node->GetNext();
     event.SetEventObject( menu );
     event.SetInt(id );
 
     event.SetEventObject( menu );
     event.SetInt(id );
 
     if (menu->GetCallback())
     {
         (void) (*(menu->GetCallback())) (*menu, event);
         return;
     }
     if (menu->GetCallback())
     {
         (void) (*(menu->GetCallback())) (*menu, event);
         return;
     }
+#endif // WXWIN_COMPATIBILITY
 
     if (menu->GetEventHandler()->ProcessEvent(event))
         return;
 
     if (menu->GetEventHandler()->ProcessEvent(event))
         return;
         gtk_label_set( label, m_text.mb_str());
 
         /* reparse key accel */
         gtk_label_set( label, m_text.mb_str());
 
         /* reparse key accel */
-        guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), m_text.mb_str() );
+        (void)gtk_label_parse_uline (GTK_LABEL(label), m_text.mb_str() );
         gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
     }
 }
         gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
     }
 }
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
-    if ( !item.GetHotKey() )
     {
         // nothing
         return (wxAcceleratorEntry *)NULL;
     {
         // nothing
         return (wxAcceleratorEntry *)NULL;
 
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
 
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
-    label << wxT('\t') << item.GetHotKey();
+    label << wxT('\t') << GetHotKey();
 
     return wxGetAccelFromString(label);
 }
 
     return wxGetAccelFromString(label);
 }
    // the menu items are deleted by the base class dtor
 }
 
    // the menu items are deleted by the base class dtor
 }
 
-virtual bool wxMenu::DoAppend(wxMenuItem *mitem)
+bool wxMenu::DoAppend(wxMenuItem *mitem)
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
-        GtkWidget *menuItem = gtk_item_factory_get_item( m_factory, path.mb_str() );
+        menuItem = gtk_item_factory_get_item( m_factory, path.mb_str() );
-        GtkWidget *menuItem = gtk_menu_item_new_with_label(mitem->GetText().mbc_str());
+        menuItem = gtk_menu_item_new_with_label(mitem->GetText().mbc_str());
-        gtk_menu_item_set_submenu( GTK_MENU_ITEM(menuItem), subMenu->m_menu );
+        gtk_menu_item_set_submenu( GTK_MENU_ITEM(menuItem), mitem->GetSubMenu()->m_menu );
     }
     else // a normal item
     {
     }
     else // a normal item
     {
         entry.path = buf;
         entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
         entry.callback_action = 0;
         entry.path = buf;
         entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
         entry.callback_action = 0;
+        if ( mitem->IsCheckable() )
             entry.item_type = "<CheckItem>";
         else
             entry.item_type = "<Item>";
             entry.item_type = "<CheckItem>";
         else
             entry.item_type = "<Item>";
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
-        GtkWidget *menuItem = gtk_item_factory_get_widget( m_factory, path.mb_str() );
+        menuItem = gtk_item_factory_get_widget( m_factory, path.mb_str() );
-        GtkWidget *menuItem = checkable ? gtk_check_menu_item_new_with_label( mitem->GetText().mb_str() )
-                                        : gtk_menu_item_new_with_label( mitem->GetText().mb_str() );
+        menuItem = checkable ? gtk_check_menu_item_new_with_label( mitem->GetText().mb_str() )
+                             : gtk_menu_item_new_with_label( mitem->GetText().mb_str() );
 
         gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
                             GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
 
         gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
                             GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
 
 static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
 {
     menu->SetInvokingWindow( win );
 static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
 {
     menu->SetInvokingWindow( win );
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
         {
             SetInvokingWindow( menuitem->GetSubMenu(), win );
         }
         if (menuitem->IsSubMenu())
         {
             SetInvokingWindow( menuitem->GetSubMenu(), win );
         }
+
+        node = node->GetNext();
 
     wxMenuBar *bar = GetMenuBar();
     if (!bar) return;
 
     wxMenuBar *bar = GetMenuBar();
     if (!bar) return;
 
-    wxMenuItem *item = bar->FindItemForId(id) ;
+    wxMenuItem *item = bar->FindItem(id) ;
     if (item && item->IsCheckable())
     {
     if (item && item->IsCheckable())
     {
-        bar->Check(id,!bar->Checked(id)) ;
+        bar->Check(id, !bar->IsChecked(id)) ;
     }
 
     wxEvtHandler* evtHandler = GetEventHandler();
     }
 
     wxEvtHandler* evtHandler = GetEventHandler();
 
     gtk_accel_group_detach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_detach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
             wxMenubarUnsetInvokingWindow( menuitem->GetSubMenu(), win );
         if (menuitem->IsSubMenu())
             wxMenubarUnsetInvokingWindow( menuitem->GetSubMenu(), win );
+        node = node->GetNext();
     gtk_accel_group_attach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_attach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
             wxMenubarSetInvokingWindow( menuitem->GetSubMenu(), win );
         if (menuitem->IsSubMenu())
             wxMenubarSetInvokingWindow( menuitem->GetSubMenu(), win );
+        node = node->GetNext();
     gtk_accel_group_attach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_attach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         wxMenubarSetInvokingWindow( menu, win );
         wxMenubarSetInvokingWindow( menu, win );
+        node = node->GetNext();
     gtk_accel_group_detach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
     gtk_accel_group_detach( m_accel, GTK_OBJECT(top_frame->m_widget) );
 #endif
 
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         wxMenubarUnsetInvokingWindow( menu, win );
         wxMenubarUnsetInvokingWindow( menu, win );
+        node = node->GetNext();
-    wxNode *node = ((wxMenu *)menu)->GetItems().First();    // const_cast
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *item = (wxMenuItem*)node->Data();
+        wxMenuItem *item = node->GetData();
         if (item->IsSubMenu())
             return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
 
         if (item->IsSubMenu())
             return FindMenuItemRecursive(item->GetSubMenu(), menuString, itemString);
 
+        node = node->GetNext();
 
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
 
 int wxMenuBar::FindMenuItem( const wxString &menuString, const wxString &itemString ) const
 {
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         int res = FindMenuItemRecursive( menu, menuString, itemString);
         int res = FindMenuItemRecursive( menu, menuString, itemString);
-        if (res != -1) return res;
-        node = node->Next();
+        if (res != -1)
+            return res;
+        node = node->GetNext();
 }
 
 // Find a wxMenuItem using its id. Recurses down into sub-menus
 }
 
 // Find a wxMenuItem using its id. Recurses down into sub-menus
 {
     wxMenuItem* result = menu->FindChildItem(id);
 
 {
     wxMenuItem* result = menu->FindChildItem(id);
 
-    wxNode *node = ((wxMenu *)menu)->GetItems().First(); // const_cast
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
     while ( node && result == NULL )
     {
     while ( node && result == NULL )
     {
-        wxMenuItem *item = (wxMenuItem*)node->Data();
+        wxMenuItem *item = node->GetData();
         if (item->IsSubMenu())
         {
             result = FindMenuItemByIdRecursive( item->GetSubMenu(), id );
         }
         if (item->IsSubMenu())
         {
             result = FindMenuItemByIdRecursive( item->GetSubMenu(), id );
         }
+        node = node->GetNext();
 wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 {
     wxMenuItem* result = 0;
 wxMenuItem* wxMenuBar::FindItem( int id, wxMenu **menuForItem ) const
 {
     wxMenuItem* result = 0;
-    wxNode *node = m_menus.First();
+    wxMenuList::Node *node = m_menus.GetFirst();
     while (node && result == 0)
     {
     while (node && result == 0)
     {
-        wxMenu *menu = (wxMenu*)node->Data();
+        wxMenu *menu = node->GetData();
         result = FindMenuItemByIdRecursive( menu, id );
         result = FindMenuItemByIdRecursive( menu, id );
+        node = node->GetNext();
     event.SetEventObject( menu );
     event.SetInt(id );
 
     event.SetEventObject( menu );
     event.SetInt(id );
 
     if (menu->GetCallback())
     {
         (void) (*(menu->GetCallback())) (*menu, event);
         return;
     }
     if (menu->GetCallback())
     {
         (void) (*(menu->GetCallback())) (*menu, event);
         return;
     }
+#endif // WXWIN_COMPATIBILITY
 
     if (menu->GetEventHandler()->ProcessEvent(event))
         return;
 
     if (menu->GetEventHandler()->ProcessEvent(event))
         return;
         gtk_label_set( label, m_text.mb_str());
 
         /* reparse key accel */
         gtk_label_set( label, m_text.mb_str());
 
         /* reparse key accel */
-        guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), m_text.mb_str() );
+        (void)gtk_label_parse_uline (GTK_LABEL(label), m_text.mb_str() );
         gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
     }
 }
         gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) );
     }
 }
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
 
 wxAcceleratorEntry *wxMenuItem::GetAccel() const
 {
-    if ( !item.GetHotKey() )
     {
         // nothing
         return (wxAcceleratorEntry *)NULL;
     {
         // nothing
         return (wxAcceleratorEntry *)NULL;
 
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
 
     // as wxGetAccelFromString() looks for TAB, insert a dummy one here
     wxString label;
-    label << wxT('\t') << item.GetHotKey();
+    label << wxT('\t') << GetHotKey();
 
     return wxGetAccelFromString(label);
 }
 
     return wxGetAccelFromString(label);
 }
    // the menu items are deleted by the base class dtor
 }
 
    // the menu items are deleted by the base class dtor
 }
 
-virtual bool wxMenu::DoAppend(wxMenuItem *mitem)
+bool wxMenu::DoAppend(wxMenuItem *mitem)
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
-        GtkWidget *menuItem = gtk_item_factory_get_item( m_factory, path.mb_str() );
+        menuItem = gtk_item_factory_get_item( m_factory, path.mb_str() );
-        GtkWidget *menuItem = gtk_menu_item_new_with_label(mitem->GetText().mbc_str());
+        menuItem = gtk_menu_item_new_with_label(mitem->GetText().mbc_str());
-        gtk_menu_item_set_submenu( GTK_MENU_ITEM(menuItem), subMenu->m_menu );
+        gtk_menu_item_set_submenu( GTK_MENU_ITEM(menuItem), mitem->GetSubMenu()->m_menu );
     }
     else // a normal item
     {
     }
     else // a normal item
     {
         entry.path = buf;
         entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
         entry.callback_action = 0;
         entry.path = buf;
         entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback;
         entry.callback_action = 0;
+        if ( mitem->IsCheckable() )
             entry.item_type = "<CheckItem>";
         else
             entry.item_type = "<Item>";
             entry.item_type = "<CheckItem>";
         else
             entry.item_type = "<Item>";
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
         gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 );  /* what is 2 ? */
 
         wxString path( mitem->GetFactoryPath() );
-        GtkWidget *menuItem = gtk_item_factory_get_widget( m_factory, path.mb_str() );
+        menuItem = gtk_item_factory_get_widget( m_factory, path.mb_str() );
-        GtkWidget *menuItem = checkable ? gtk_check_menu_item_new_with_label( mitem->GetText().mb_str() )
-                                        : gtk_menu_item_new_with_label( mitem->GetText().mb_str() );
+        menuItem = checkable ? gtk_check_menu_item_new_with_label( mitem->GetText().mb_str() )
+                             : gtk_menu_item_new_with_label( mitem->GetText().mb_str() );
 
         gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
                             GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
 
         gtk_signal_connect( GTK_OBJECT(menuItem), "activate",
                             GTK_SIGNAL_FUNC(gtk_menu_clicked_callback),
 
 static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
 {
     menu->SetInvokingWindow( win );
 static void SetInvokingWindow( wxMenu *menu, wxWindow *win )
 {
     menu->SetInvokingWindow( win );
-    wxNode *node = menu->GetItems().First();
+    wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
-        wxMenuItem *menuitem = (wxMenuItem*)node->Data();
+        wxMenuItem *menuitem = node->GetData();
         if (menuitem->IsSubMenu())
         {
             SetInvokingWindow( menuitem->GetSubMenu(), win );
         }
         if (menuitem->IsSubMenu())
         {
             SetInvokingWindow( menuitem->GetSubMenu(), win );
         }
+
+        node = node->GetNext();