don't assert (and then crash) in wxEvent::Clone() checking code

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57601 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Paul Cornett
2008-12-27 17:47:55 +00:00
parent 2b036c4b23
commit 95fa881e92

View File

@@ -255,29 +255,35 @@ static bool DoCommonPostInit()
// the executable currently running, which are not necessarily all // the executable currently running, which are not necessarily all
// wxWidgets event classes. // wxWidgets event classes.
const wxClassInfo *ci = wxClassInfo::GetFirst(); const wxClassInfo *ci = wxClassInfo::GetFirst();
while (ci) for (; ci; ci = ci->GetNext())
{ {
// is this class derived from wxEvent? // is this class derived from wxEvent?
if (ci->IsKindOf(CLASSINFO(wxEvent)) && wxString(ci->GetClassName()) != "wxEvent") if (!ci->IsKindOf(CLASSINFO(wxEvent)) || wxString(ci->GetClassName()) == "wxEvent")
{ continue;
if (!ci->IsDynamic()) if (!ci->IsDynamic())
{
wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!", wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!",
ci->GetClassName()); ci->GetClassName());
continue;
}
// yes; test if it implements Clone() correctly // yes; test if it implements Clone() correctly
wxEvent* test = dynamic_cast<wxEvent*>(ci->CreateObject()); wxEvent* test = dynamic_cast<wxEvent*>(ci->CreateObject());
wxASSERT_MSG(test, "The event class should have a DECLARE_DYNAMIC_CLASS macro!"); if (test == NULL)
{
wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!",
ci->GetClassName());
continue;
}
wxEvent* cloned = test->Clone(); wxEvent* cloned = test->Clone();
if (!cloned || cloned->GetClassInfo() != ci) if (!cloned || cloned->GetClassInfo() != ci)
wxLogWarning("The event class '%s' does not correctly implements wxEvent::Clone()!", wxLogWarning("The event class '%s' does not correctly implement Clone()!",
ci->GetClassName()); ci->GetClassName());
delete test; delete test;
} }
ci = ci->GetNext();
}
#endif #endif
return true; return true;