From 4936c0998202068f002b24142b61cc8aecb1f532 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 5 Apr 2012 22:27:32 +0000 Subject: [PATCH] Reuse wxMenu::SendEvent() from wxFrameBase::ProcessCommand(). Not only this avoids code duplication but it also fixes wrong code in wxFrameBase version as it set the event object incorrectly to the frame itself instead of setting it to the menu. Added event object check to the menu events unit test. Closes #1595. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71114 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/common/framecmn.cpp | 13 ++++++++----- tests/menu/menu.cpp | 12 ++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/common/framecmn.cpp b/src/common/framecmn.cpp index fc61d4e9ae..3e40e5db20 100644 --- a/src/common/framecmn.cpp +++ b/src/common/framecmn.cpp @@ -251,8 +251,7 @@ bool wxFrameBase::ProcessCommand(int id) bool wxFrameBase::ProcessCommand(wxMenuItem *item) { - wxCommandEvent commandEvent(wxEVT_COMMAND_MENU_SELECTED, item->GetId()); - commandEvent.SetEventObject(this); + wxCHECK_MSG( item, false, wxS("Menu item can't be NULL") ); if (!item->IsEnabled()) return true; @@ -260,19 +259,23 @@ bool wxFrameBase::ProcessCommand(wxMenuItem *item) if ((item->GetKind() == wxITEM_RADIO) && item->IsChecked() ) return true; + int checked; if (item->IsCheckable()) { item->Toggle(); // use the new value - commandEvent.SetInt(item->IsChecked()); + checked = item->IsChecked(); } else // Uncheckable item. { - commandEvent.SetInt(-1); + checked = -1; } - return HandleWindowEvent(commandEvent); + wxMenu* const menu = item->GetMenu(); + wxCHECK_MSG( menu, false, wxS("Menu item should be attached to a menu") ); + + return menu->SendEvent(item->GetId(), checked); } #endif // wxUSE_MENUS diff --git a/tests/menu/menu.cpp b/tests/menu/menu.cpp index 79b1e3ec49..abc4db0b0d 100644 --- a/tests/menu/menu.cpp +++ b/tests/menu/menu.cpp @@ -116,6 +116,9 @@ private: wxArrayString m_menuLabels; + // The menu containing the item with MenuTestCase_Bar id. + wxMenu* m_menuWithBar; + DECLARE_NO_COPY_CLASS(MenuTestCase) }; @@ -155,6 +158,7 @@ void MenuTestCase::CreateFrame() PopulateMenu(helpMenu, "Helpmenu item ", itemcount); helpMenu->Append(MenuTestCase_Bar, "Bar\tF1"); + m_menuWithBar = helpMenu; helpMenu->AppendSubMenu(subMenu, "Sub&menu", "Test a submenu"); // +2 for "Foo" and "Bar", +2 for the 2 submenus @@ -464,5 +468,13 @@ void MenuTestCase::Events() const wxCommandEvent& ev = handler.GetEvent(); CPPUNIT_ASSERT_EQUAL( static_cast(MenuTestCase_Bar), ev.GetId() ); + + wxObject* const src = ev.GetEventObject(); + CPPUNIT_ASSERT( src ); + + CPPUNIT_ASSERT_EQUAL( "wxMenu", + wxString(src->GetClassInfo()->GetClassName()) ); + CPPUNIT_ASSERT_EQUAL( static_cast(m_menuWithBar), + src ); #endif // wxUSE_UIACTIONSIMULATOR } -- 2.45.2