+ ApplyWidgetStyle();
+}
+
+wxMenuBar::~wxMenuBar()
+{
+// gtk_object_unref( GTK_OBJECT(m_factory) ); why not ?
+}
+
+static void wxMenubarUnsetInvokingWindow( wxMenu *menu, wxWindow *win )
+{
+ menu->SetInvokingWindow( (wxWindow*) NULL );
+
+#if (GTK_MINOR_VERSION > 0)
+ wxWindow *top_frame = win;
+ while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
+ top_frame = top_frame->GetParent();
+
+ /* support for native hot keys */
+ gtk_accel_group_detach( menu->m_accel, GTK_OBJECT(top_frame->m_widget) );
+#endif
+
+ wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
+ while (node)
+ {
+ wxMenuItem *menuitem = node->GetData();
+ if (menuitem->IsSubMenu())
+ wxMenubarUnsetInvokingWindow( menuitem->GetSubMenu(), win );
+ node = node->GetNext();
+ }
+}
+
+static void wxMenubarSetInvokingWindow( wxMenu *menu, wxWindow *win )
+{
+ menu->SetInvokingWindow( win );
+
+#if (GTK_MINOR_VERSION > 0) && (GTK_MICRO_VERSION > 0)
+ wxWindow *top_frame = win;
+ while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
+ top_frame = top_frame->GetParent();
+
+ /* support for native hot keys */
+ GtkObject *obj = GTK_OBJECT(top_frame->m_widget);
+ if ( !g_slist_find( menu->m_accel->attach_objects, obj ) )
+ gtk_accel_group_attach( menu->m_accel, obj );
+#endif
+
+ wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst();
+ while (node)
+ {
+ wxMenuItem *menuitem = node->GetData();
+ if (menuitem->IsSubMenu())
+ wxMenubarSetInvokingWindow( menuitem->GetSubMenu(), win );
+ node = node->GetNext();
+ }
+}
+
+void wxMenuBar::SetInvokingWindow( wxWindow *win )
+{
+ m_invokingWindow = win;
+#if (GTK_MINOR_VERSION > 0) && (GTK_MICRO_VERSION > 0)
+ wxWindow *top_frame = win;
+ while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
+ top_frame = top_frame->GetParent();
+
+ /* support for native key accelerators indicated by underscroes */
+ GtkObject *obj = GTK_OBJECT(top_frame->m_widget);
+ if ( !g_slist_find( m_accel->attach_objects, obj ) )
+ gtk_accel_group_attach( m_accel, obj );
+#endif
+
+ wxMenuList::Node *node = m_menus.GetFirst();
+ while (node)
+ {
+ wxMenu *menu = node->GetData();
+ wxMenubarSetInvokingWindow( menu, win );
+ node = node->GetNext();
+ }
+}
+
+void wxMenuBar::UnsetInvokingWindow( wxWindow *win )
+{
+ m_invokingWindow = (wxWindow*) NULL;
+#if (GTK_MINOR_VERSION > 0) && (GTK_MICRO_VERSION > 0)
+ wxWindow *top_frame = win;
+ while (top_frame->GetParent() && !(top_frame->IsTopLevel()))
+ top_frame = top_frame->GetParent();
+
+ /* support for native key accelerators indicated by underscroes */
+ gtk_accel_group_detach( m_accel, GTK_OBJECT(top_frame->m_widget) );
+#endif
+
+ wxMenuList::Node *node = m_menus.GetFirst();
+ while (node)
+ {
+ wxMenu *menu = node->GetData();
+ wxMenubarUnsetInvokingWindow( menu, win );
+ node = node->GetNext();
+ }
+}
+
+bool wxMenuBar::Append( wxMenu *menu, const wxString &title )
+{
+ if ( !wxMenuBarBase::Append( menu, title ) )
+ return FALSE;
+
+ return GtkAppend(menu, title);