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:
@@ -59,6 +59,27 @@ wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
|
|||||||
wxItemKind kind,
|
wxItemKind kind,
|
||||||
wxMenu *subMenu)
|
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
|
// notice that parentMenu can be NULL: the item can be attached to the menu
|
||||||
// later with SetMenu()
|
// later with SetMenu()
|
||||||
|
|
||||||
@@ -68,10 +89,6 @@ wxMenuItemBase::wxMenuItemBase(wxMenu *parentMenu,
|
|||||||
m_isChecked = false;
|
m_isChecked = false;
|
||||||
m_id = id;
|
m_id = id;
|
||||||
m_kind = kind;
|
m_kind = kind;
|
||||||
if (m_id == wxID_ANY)
|
|
||||||
m_id = wxWindow::NewControlId();
|
|
||||||
if (m_id == wxID_SEPARATOR)
|
|
||||||
m_kind = wxITEM_SEPARATOR;
|
|
||||||
|
|
||||||
SetItemLabel(text);
|
SetItemLabel(text);
|
||||||
SetHelp(help);
|
SetHelp(help);
|
||||||
|
Reference in New Issue
Block a user