wxMenuBar::~wxMenuBar()
{
- if (m_widget)
+ if (m_widget && IsAttached())
{
// 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_focusWidget =
m_widget = NULL;
+ GTKDisconnect(widget);
g_object_unref(widget);
}
}
// Destroying a menu generates a "hide" signal even if it's not shown
// currently, so disconnect it to avoid dummy wxEVT_MENU_CLOSE events
// generation.
- g_signal_handlers_disconnect_by_func(m_menu, (gpointer)menu_hide, this);
+ g_signal_handlers_disconnect_matched(m_menu,
+ GSignalMatchType(G_SIGNAL_MATCH_DATA), 0, 0, NULL, NULL, this);
// see wxMenu::Init
g_object_unref(m_menu);
return NULL;
GtkWidget * const mitem = item->GetMenuItem();
+
+ g_signal_handlers_disconnect_matched(mitem,
+ GSignalMatchType(G_SIGNAL_MATCH_DATA), 0, 0, NULL, NULL, item);
+
#ifdef __WXGTK3__
gtk_menu_item_set_submenu(GTK_MENU_ITEM(mitem), NULL);
#else