]> git.saurik.com Git - wxWidgets.git/commitdiff
Reuse wxMenu::SendEvent() from wxFrameBase::ProcessCommand().
authorVadim Zeitlin <vadim@wxwidgets.org>
Thu, 5 Apr 2012 22:27:32 +0000 (22:27 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Thu, 5 Apr 2012 22:27:32 +0000 (22:27 +0000)
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
tests/menu/menu.cpp

index fc61d4e9ae6c74746ee904e6fab8d02eb95bab7c..3e40e5db200f905ad6710f679bf2f0821f860c56 100644 (file)
@@ -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
index 79b1e3ec498304eb85149776fbd3da5201480f80..abc4db0b0d3251f5f0e6e2d34a6f9baee21f2034 100644 (file)
@@ -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<int>(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<wxObject*>(m_menuWithBar),
+                          src );
 #endif // wxUSE_UIACTIONSIMULATOR
 }