X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/51181d291194b7ae616cfb17c984fd8927e4a977..b85b06e13d22e7fc1604ec1a49caa1227a1b3d36:/src/msw/frame.cpp diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 15c9e2bb59..33b6df22bb 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -890,8 +890,9 @@ bool wxFrame::HandleSize(int WXUNUSED(x), int WXUNUSED(y), WXUINT id) return false; } -bool wxFrame::HandleCommand(WXWORD id_, WXWORD cmd, WXHWND control) +bool wxFrame::HandleCommand(WXWORD id, WXWORD cmd, WXHWND control) { +#if wxUSE_MENUS // we only need to handle the menu and accelerator commands from the items // of our menu bar, base wxWindow class already handles the rest if ( !control && (cmd == 0 /* menu */ || cmd == 1 /* accel */) ) @@ -900,54 +901,40 @@ bool wxFrame::HandleCommand(WXWORD id_, WXWORD cmd, WXHWND control) if ( !wxCurrentPopupMenu ) #endif // wxUSE_MENUS_NATIVE { - wxMenuBar * const mbar = GetMenuBar(); - if ( mbar ) - { - // sign extend to int from short before comparing with the - // other int ids - const int id = (signed short)id_; - - wxMenuItem * const mitem = mbar->FindItem(id); - if ( mitem ) - return ProcessCommand(mitem); - } + wxMenuItem * const mitem = FindItemInMenuBar((signed short)id); + if ( mitem ) + return ProcessCommand(mitem); } } +#endif // wxUSE_MENUS - return wxFrameBase::HandleCommand(id_, cmd, control);; + return wxFrameBase::HandleCommand(id, cmd, control);; } #if wxUSE_MENUS -bool wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu) +bool +wxFrame::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU WXUNUSED(hMenu)) { - int item; - if ( flags == 0xFFFF && hMenu == 0 ) - { - // menu was removed from screen - item = -1; - } -#ifndef __WXMICROWIN__ - else if ( !(flags & MF_POPUP) && !(flags & MF_SEPARATOR) ) - { - item = nItem; - } -#endif - else - { - // don't give hints for separators (doesn't make sense) nor for the - // items opening popup menus (they don't have them anyhow) but do clear - // the status line - otherwise, we would be left with the help message - // for the previous item which doesn't apply any more - DoGiveHelp(wxEmptyString, true); - - return false; - } + // WM_MENUSELECT is generated for both normal items and menus, including + // the top level menus of the menu bar, which can't be represented using + // any valid identifier in wxMenuEvent so use -1 for them + // the menu highlight events for n + const int item = flags & (MF_POPUP | MF_SEPARATOR) ? -1 : nItem; wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item); event.SetEventObject(this); - return HandleWindowEvent(event); + if ( HandleWindowEvent(event) ) + return true; + + // by default, i.e. if the event wasn't handled above, clear the status bar + // text when an item which can't have any associated help string in wx API + // is selected + if ( item == -1 ) + DoGiveHelp(wxEmptyString, true); + + return false; } bool wxFrame::HandleMenuLoop(const wxEventType& evtType, WXWORD isPopup)