Check that menu ids are limited to MSW-supported range.

We already check that positive (i.e. specified by user and not generated by
wx) window ids are in 0..SHRT_MAX range. Now do the same for the menu ids as
ids outside of this range suffer from the same problem under MSW: they get
wrapped and become negative when we receive events for them.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64226 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2010-05-06 12:40:18 +00:00
parent bcd286534a
commit d93b98740c

View File

@ -59,6 +59,27 @@ wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
wxItemKind kind,
wxMenu *subMenu)
{
switch ( id )
{
case wxID_ANY:
m_id = wxWindow::NewControlId();
break;
case wxID_SEPARATOR:
m_id = wxID_SEPARATOR;
m_kind = wxITEM_SEPARATOR;
break;
default:
// ids are limited to 16 bits under MSW so portable code shouldn't
// use ids outside of this range (negative ids generated by wx are
// fine though)
wxASSERT_MSG( (id >= 0 && id < SHRT_MAX) ||
(id >= wxID_AUTO_LOWEST && id <= wxID_AUTO_HIGHEST),
wxS("invalid id value") );
m_id = id;
}
// notice that parentMenu can be NULL: the item can be attached to the menu
// later with SetMenu()
@ -68,10 +89,6 @@ wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
m_isChecked = false;
m_id = id;
m_kind = kind;
if (m_id == wxID_ANY)
m_id = wxWindow::NewControlId();
if (m_id == wxID_SEPARATOR)
m_kind = wxITEM_SEPARATOR;
SetItemLabel(text);
SetHelp(help);