X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4e621d24713f971d1a2d440f79ccc4593aede4b6..e67e249752fb5814557fa4bc49c1bf1457263229:/src/gtk/menu.cpp diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index d13e233a34..b04089376b 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -63,11 +63,12 @@ static void DoCommonMenuCallbackCode(wxMenu *menu, wxMenuEvent& event) 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; g_object_unref(widget); } @@ -339,7 +340,8 @@ wxMenu *wxMenuBar::Remove(size_t pos) gtk_widget_destroy( menu->m_owner ); menu->m_owner = NULL; - DetachFromFrame( menu, m_menuBarFrame ); + if ( m_menuBarFrame ) + DetachFromFrame( menu, m_menuBarFrame ); return menu; } @@ -684,6 +686,13 @@ static void menu_map(GtkWidget*, wxMenu* menu) // "hide" from m_menu static void menu_hide(GtkWidget*, wxMenu* menu) { + // When using Ubuntu Unity desktop environment we get "hide" signal even + // when the window is not shown yet because Unity hides all the menus to + // show them only in the global menu bar. Just ignore this even instead of + // crashing in DoCommonMenuCallbackCode(). + if ( !menu->GetWindow() ) + return; + wxMenuEvent event(wxEVT_MENU_CLOSE, menu->m_popupShown ? -1 : 0, menu); menu->m_popupShown = false; DoCommonMenuCallbackCode(menu, event); @@ -1231,8 +1240,6 @@ const char *wxGetStockGtkID(wxWindowID id) case wx: \ return gtk; - #define STOCKITEM_26(wx,gtk) STOCKITEM(wx,gtk) - #if GTK_CHECK_VERSION(2,8,0) #define STOCKITEM_28(wx,gtk) STOCKITEM(wx,gtk) #else @@ -1248,7 +1255,7 @@ const char *wxGetStockGtkID(wxWindowID id) switch (id) { - STOCKITEM_26(wxID_ABOUT, GTK_STOCK_ABOUT) + STOCKITEM(wxID_ABOUT, GTK_STOCK_ABOUT) STOCKITEM(wxID_ADD, GTK_STOCK_ADD) STOCKITEM(wxID_APPLY, GTK_STOCK_APPLY) STOCKITEM(wxID_BACKWARD, GTK_STOCK_GO_BACK) @@ -1263,10 +1270,10 @@ const char *wxGetStockGtkID(wxWindowID id) STOCKITEM(wxID_CUT, GTK_STOCK_CUT) STOCKITEM(wxID_DELETE, GTK_STOCK_DELETE) STOCKITEM(wxID_DOWN, GTK_STOCK_GO_DOWN) - STOCKITEM_26(wxID_EDIT, GTK_STOCK_EDIT) + STOCKITEM(wxID_EDIT, GTK_STOCK_EDIT) STOCKITEM(wxID_EXECUTE, GTK_STOCK_EXECUTE) STOCKITEM(wxID_EXIT, GTK_STOCK_QUIT) - STOCKITEM_26(wxID_FILE, GTK_STOCK_FILE) + STOCKITEM(wxID_FILE, GTK_STOCK_FILE) STOCKITEM(wxID_FIND, GTK_STOCK_FIND) STOCKITEM(wxID_FIRST, GTK_STOCK_GOTO_FIRST) STOCKITEM(wxID_FLOPPY, GTK_STOCK_FLOPPY)