X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/defc0789c198fe5af4d60fb4804d146807dd48e8..53e8c532c641ea8285b436990ff6e29ddd8d0443:/src/gtk/menu.cpp diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 5b29ede177..82956da0a6 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -15,11 +15,11 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/menu.h" #include "wx/log.h" #include "wx/intl.h" #include "wx/app.h" #include "wx/bitmap.h" -#include "wx/menu.h" #if wxUSE_ACCEL #include "wx/accel.h" @@ -982,8 +982,12 @@ wxMenu::~wxMenu() if ( GTK_IS_WIDGET( m_menu )) { - gtk_widget_unref( m_menu ); // see wxMenu::Init - gtk_widget_destroy( m_menu ); + // see wxMenu::Init + gtk_widget_unref( m_menu ); + // if the menu is inserted in another menu at this time, there was + // one more reference to it: + if ( m_owner ) + gtk_widget_destroy( m_menu ); } } @@ -1049,13 +1053,24 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) { wxString text = mitem->GetText(); const wxBitmap *bitmap = &mitem->GetBitmap(); - GdkPixmap *gdk_pixmap = bitmap->GetPixmap(); - GdkBitmap *gdk_bitmap = bitmap->GetMask() ? bitmap->GetMask()->GetBitmap() : (GdkBitmap*) NULL; #ifdef __WXGTK20__ menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV( text ) ); - GtkWidget *image = gtk_image_new_from_pixmap( gdk_pixmap, gdk_bitmap ); + GtkWidget *image; + if (bitmap->HasPixbuf()) + { + image = gtk_image_new_from_pixbuf(bitmap->GetPixbuf()); + } + else + { + GdkPixmap *gdk_pixmap = bitmap->GetPixmap(); + GdkBitmap *gdk_bitmap = bitmap->GetMask() ? + bitmap->GetMask()->GetBitmap() : + (GdkBitmap*) NULL; + image = gtk_image_new_from_pixmap( gdk_pixmap, gdk_bitmap ); + } + gtk_widget_show(image); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(menuItem), image ); @@ -1069,6 +1084,8 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) else gtk_menu_shell_insert(GTK_MENU_SHELL(m_menu), menuItem, pos); #else + GdkPixmap *gdk_pixmap = bitmap->GetPixmap(); + GdkBitmap *gdk_bitmap = bitmap->GetMask() ? bitmap->GetMask()->GetBitmap() : (GdkBitmap*) NULL; menuItem = gtk_pixmap_menu_item_new (); GtkWidget *label = gtk_accel_label_new ( wxGTK_CONV( text ) ); @@ -1375,7 +1392,7 @@ static wxString GetHotKey( const wxMenuItem& item ) case WXK_F10: case WXK_F11: case WXK_F12: - hotkey << wxT('F') << code - WXK_F1 + 1; + hotkey += wxString::Format(wxT("F%d"), code - WXK_F1 + 1); break; // TODO: we should use gdk_keyval_name() (a.k.a.