// wxMenuBar
//-----------------------------------------------------------------------------
+wxMenuBar::~wxMenuBar()
+{
+ if (m_widget)
+ {
+ // Work around a probable bug in Ubuntu 12.04 which causes a warning if
+ // gtk_widget_destroy() is called on a wxMenuBar attached to a frame
+ GtkWidget* widget = m_widget;
+ m_widget = NULL;
+ g_object_unref(widget);
+ }
+}
+
void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long style)
{
#if wxUSE_LIBHILDON || wxUSE_LIBHILDON2
GTKApplyWidgetStyle();
#endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2
- g_object_ref(m_widget);
+ g_object_ref_sink(m_widget);
for (size_t i = 0; i < n; ++i )
Append(menus[i], titles[i]);
gtk_widget_set_sensitive( menu->m_owner, flag );
}
+bool wxMenuBar::IsEnabledTop(size_t pos) const
+{
+ wxMenuList::compatibility_iterator node = m_menus.Item( pos );
+ wxCHECK_MSG( node, false, wxS("invalid index in IsEnabledTop") );
+ wxMenu* const menu = node->GetData();
+ wxCHECK_MSG( menu->m_owner, true, wxS("no menu owner?") );
+ return gtk_widget_get_sensitive( menu->m_owner ) != 0;
+}
+
wxString wxMenuBar::GetMenuLabel( size_t pos ) const
{
wxMenuList::compatibility_iterator node = m_menus.Item( pos );
return NULL;
GtkWidget * const mitem = item->GetMenuItem();
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL);
+ if (!gtk_check_version(2,12,0))
+ {
+ // gtk_menu_item_remove_submenu() is deprecated since 2.12, but
+ // gtk_menu_item_set_submenu() can now be used with NULL submenu now so
+ // just do use it.
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL);
+ }
+ else // GTK+ < 2.12
+ {
+ // In 2.10 calling gtk_menu_item_set_submenu() with NULL submenu
+ // results in critical GTK+ error messages so use the old function
+ // instead.
+ gtk_menu_item_remove_submenu(GTK_MENU_ITEM(mitem));
+ }
+
gtk_widget_destroy(mitem);
item->SetMenuItem(NULL);