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
wxItemKind kind,
wxMenu *subMenu)
{
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()
// notice that parentMenu can be NULL: the item can be attached to the menu
// later with SetMenu()
m_isChecked = false;
m_id = id;
m_kind = kind;
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);
SetItemLabel(text);
SetHelp(help);