From 69384772acc96ab55b235f8d0e4d67d8ee4d6862 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 30 Aug 2013 23:32:37 +0000 Subject: [PATCH] Fix wxMenu::GetTitle() before the menu is appended to the menu bar. The mnemonics conversion was not done correctly when the menu title contained them but the menu hadn't been appended to the menu bar yet. Closes #15461. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@74731 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 4 ++++ include/wx/gtk/menu.h | 3 ++- src/gtk/menu.cpp | 15 +++++++++------ tests/menu/menu.cpp | 4 ++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/changes.txt b/docs/changes.txt index 243ee67..42d0bc5 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -572,6 +572,10 @@ All (GUI): - Set correct cursor when the mouse is over image map links in wxHTML (LukasK). - Add wxPropertyGridPageState::GetColumnFullWidth() (Teodor Petrov). +wxGTK: + +- Fix wxMenu::GetTitle() before the menu is appended to the bar (David Hart). + wxMSW: - It is now possible to tab into radio boxes again. diff --git a/include/wx/gtk/menu.h b/include/wx/gtk/menu.h index 6290245..fec12ba 100644 --- a/include/wx/gtk/menu.h +++ b/include/wx/gtk/menu.h @@ -81,7 +81,8 @@ public: // Returns the title, with mnemonics translated to wx format wxString GetTitle() const; - // TODO: virtual void SetTitle(const wxString& title); + // Sets the title, with mnemonics translated to gtk format + virtual void SetTitle(const wxString& title); // implementation GTK only GtkWidget *m_menu; // GtkMenu diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index 4cf5d7f..f5194b8 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -317,11 +317,10 @@ void wxMenuBar::GtkAppend(wxMenu* menu, const wxString& title, int pos) else #endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2 /!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 { - const wxString str(wxConvertMnemonicsToGTK(title)); - // This doesn't have much effect right now. - menu->SetTitle( str ); + menu->SetTitle( title ); + const wxString str(wxConvertMnemonicsToGTK(title)); // The "m_owner" is the "menu item" menu->m_owner = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( str ) ); @@ -504,10 +503,9 @@ void wxMenuBar::SetMenuLabel( size_t pos, const wxString& label ) wxMenu* menu = node->GetData(); - const wxString str(wxConvertMnemonicsToGTK(label)); - - menu->SetTitle( str ); + menu->SetTitle( label ); + const wxString str(wxConvertMnemonicsToGTK(label)); if (menu->m_owner) gtk_label_set_text_with_mnemonic(GTK_LABEL(gtk_bin_get_child(GTK_BIN(menu->m_owner))), wxGTK_CONV(str)); } @@ -843,6 +841,11 @@ wxString wxMenu::GetTitle() const return wxConvertMnemonicsFromGTK(wxMenuBase::GetTitle()); } +void wxMenu::SetTitle(const wxString& title) +{ + wxMenuBase::SetTitle(wxConvertMnemonicsToGTK(title)); +} + void wxMenu::GtkAppend(wxMenuItem* mitem, int pos) { GtkWidget *menuItem; diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 6d73518..2f67765 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -150,6 +150,10 @@ void MenuTestCase::CreateFrame() subMenu->AppendSubMenu(subsubMenu, "Subsubmen&u", "Test a subsubmenu"); + // Check GetTitle() returns the correct string _before_ appending to the bar + fileMenu->SetTitle("&Foo\tCtrl-F"); + CPPUNIT_ASSERT_EQUAL( "&Foo\tCtrl-F", fileMenu->GetTitle() ); + PopulateMenu(fileMenu, "Filemenu item ", itemcount); fileMenu->Append(MenuTestCase_Foo, "&Foo\tCtrl-F", "Test item to be found"); -- 2.7.4