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:
parent
bcd286534a
commit
d93b98740c
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user