From 92159e3d769551d78d8f48f438fc8c40655d23d2 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 2 Jun 2008 21:46:29 +0000 Subject: [PATCH] Separate label with wx mnemonics (&) and with gtk mnemonics (_) into m_text and m_gtkText, fixes #4409 git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@53958 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/menuitem.h | 4 ++- src/gtk/menu.cpp | 58 ++++----------------------------------- 2 files changed, 8 insertions(+), 54 deletions(-) diff --git a/include/wx/gtk/menuitem.h b/include/wx/gtk/menuitem.h index dbc24b2d88..bc5c7a8fc3 100644 --- a/include/wx/gtk/menuitem.h +++ b/include/wx/gtk/menuitem.h @@ -29,7 +29,6 @@ public: // implement base class virtuals virtual void SetItemLabel( const wxString& str ); - virtual wxString GetItemLabel() const; virtual void Enable( bool enable = true ); virtual void Check( bool check = true ); virtual bool IsChecked() const; @@ -48,6 +47,8 @@ public: // and in the hotkey which is used to set given pointer static wxString GTKProcessMenuItemLabel(const wxString& str, wxString *hotKey); + wxString GetGtkItemLabel() { return m_gtkText; } + #if WXWIN_COMPATIBILITY_2_8 // compatibility only, don't use in new code wxDEPRECATED( @@ -68,6 +69,7 @@ private: // style to GTK+ and is called from ctor and SetText() void DoSetText(const wxString& text); + wxString m_gtkText; // m_text after conversion to GTK mnemonics wxString m_hotKey; wxBitmap m_bitmap; // Bitmap for menuitem, if any diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 679ca87859..5bb7845a00 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -642,53 +642,6 @@ wxString wxMenuItemBase::GetLabelText(const wxString& text) // format, not GTK+ format, so we do what the other ports do. return wxStripMenuCodes(text); - -#if 0 - wxString label; - - for ( const wxChar *pc = text.c_str(); *pc; pc++ ) - { - if ( *pc == wxT('\t')) - break; - - if ( *pc == wxT('_') ) - { - // GTK 1.2 escapes "xxx_xxx" to "xxx__xxx" - pc++; - label += *pc; - continue; - } - - if ( *pc == wxT('\\') ) - { - // GTK 2.0 escapes "xxx/xxx" to "xxx\/xxx" - pc++; - label += *pc; - continue; - } - - if ( (*pc == wxT('&')) && (*(pc+1) != wxT('&')) ) - { - // wxMSW escapes "&" - // "&" is doubled to indicate "&" instead of accelerator - continue; - } - - label += *pc; - } - - // wxPrintf( wxT("GetLabelText(): text %s label %s\n"), text.c_str(), label.c_str() ); - - return label; -#endif -} - -wxString wxMenuItem::GetItemLabel() const -{ - wxString label = wxConvertMnemonicsFromGTK(m_text); - if (!m_hotKey.IsEmpty()) - label << "\t" << m_hotKey; - return label; } void wxMenuItem::SetItemLabel( const wxString& str ) @@ -702,7 +655,6 @@ void wxMenuItem::SetItemLabel( const wxString& str ) // Some optimization to avoid flicker wxString oldLabel = m_text; oldLabel = wxStripMenuCodes(oldLabel); - oldLabel.Replace(wxT("_"), wxT("")); wxString label1 = wxStripMenuCodes(str); #if wxUSE_ACCEL wxString oldhotkey = m_hotKey; // Store the old hotkey in Ctrl-foo format @@ -719,7 +671,7 @@ void wxMenuItem::SetItemLabel( const wxString& str ) if (m_menuItem) { // stock menu items can have empty labels: - wxString text = m_text; + wxString text = m_gtkText; if (text.IsEmpty() && !IsSeparator()) { wxASSERT_MSG(isstock, wxT("A non-stock menu item with an empty label?")); @@ -836,8 +788,8 @@ wxString wxMenuItem::GTKProcessMenuItemLabel(const wxString& str, wxString *hotK // it's valid for this function to be called even if m_menuItem == NULL void wxMenuItem::DoSetText( const wxString& str ) { - m_text.Empty(); - m_text = GTKProcessMenuItemLabel(str, &m_hotKey); + m_text = str; + m_gtkText = GTKProcessMenuItemLabel(str, &m_hotKey); } #if wxUSE_ACCEL @@ -989,7 +941,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) GtkWidget *menuItem; // cache some data used later - wxString text = mitem->wxMenuItemBase::GetItemLabel(); + wxString text = mitem->GetGtkItemLabel(); int id = mitem->GetId(); bool isstock = wxIsStockID(id); const char *stockid = NULL; @@ -1011,7 +963,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) menuItem = gtk_separator_menu_item_new(); m_prevRadio = NULL; } - else if ( mitem->GetBitmap().Ok() || + else if ( mitem->GetBitmap().IsOk() || (mitem->GetKind() == wxITEM_NORMAL && isstock) ) { wxBitmap bitmap(mitem->GetBitmap());