]> git.saurik.com Git - wxWidgets.git/commitdiff
Fix int field of wxCommandEvents generated by menu items in wxMSW.
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Sep 2011 13:23:14 +0000 (13:23 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 16 Sep 2011 13:23:14 +0000 (13:23 +0000)
Set the int field of wxCommandEvent generated by clicking on the menu items
correctly for not checkable items: it is supposed to be -1 and not 0 (which is
the value for checkable but currently unchecked items). This was already the
case for wxGTK and wxOSX and implied by the comments in the code.

Make wxMSW behave like this too and clearly document this behaviour.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@69101 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

interface/wx/event.h
src/common/framecmn.cpp
src/msw/menu.cpp

index 06939b28894d7b357ece5c78f8b5fc14864b3aea..f8cd19f9ec87fb2478054c3e7b3e6a3375d7fe0d 100644 (file)
@@ -2608,6 +2608,10 @@ public:
         Returns the integer identifier corresponding to a listbox, choice or
         radiobox selection (only if the event was a selection, not a deselection),
         or a boolean value representing the value of a checkbox.
+
+        For a menu item, this method returns -1 if the item is not checkable or
+        a boolean value (true or false) for checkable items indicating the new
+        state of the item.
     */
     int GetInt() const;
 
index 11d35444bc6f3667c6fc496a732efd7f5d567854..17633160c4d44101e2cd8b36faeb5ba32f709fc1 100644 (file)
@@ -271,6 +271,10 @@ bool wxFrameBase::ProcessCommand(wxMenuItem *item)
         // use the new value
         commandEvent.SetInt(item->IsChecked());
     }
+    else // Uncheckable item.
+    {
+        commandEvent.SetInt(-1);
+    }
 
     return HandleWindowEvent(commandEvent);
 }
index 8e11eeb1d319e92ed20fbe88c0657ccbdefca545..3b1871f09d2498f3f1b7013e5ad8656831f12928 100644 (file)
@@ -949,18 +949,25 @@ bool wxMenu::MSWCommand(WXUINT WXUNUSED(param), WXWORD id_)
     // ignore commands from the menu title
     if ( id != idMenuTitle )
     {
+        // Default value for uncheckable items.
+        int checked = -1;
+
         // update the check item when it's clicked
         wxMenuItem * const item = FindItem(id);
         if ( item && item->IsCheckable() )
+        {
             item->Toggle();
 
-        // get the status of the menu item: note that it has been just changed
-        // by Toggle() above so here we already get the new state of the item
-        //
-        // Also notice that we must pass unsigned id_ and not sign-extended id
-        // to ::GetMenuState() as this is what it expects.
-        UINT menuState = ::GetMenuState(GetHmenu(), id_, MF_BYCOMMAND);
-        SendEvent(id, menuState & MF_CHECKED ? 1 : 0);
+            // Get the status of the menu item: note that it has been just changed
+            // by Toggle() above so here we already get the new state of the item.
+            //
+            // Also notice that we must pass unsigned id_ and not sign-extended id
+            // to ::GetMenuState() as this is what it expects.
+            UINT menuState = ::GetMenuState(GetHmenu(), id_, MF_BYCOMMAND);
+            checked = (menuState & MF_CHECKED) != 0;
+        }
+
+        SendEvent(id, checked);
     }
 
     return true;