X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4f6b94a33a3d8779c078740b3eae2090015c838a..f61ea9468f0b70bc86ccf0746c135071a716ee3d:/src/common/init.cpp diff --git a/src/common/init.cpp b/src/common/init.cpp index ee3847634f..0e76cc4aba 100644 --- a/src/common/init.cpp +++ b/src/common/init.cpp @@ -34,7 +34,7 @@ #include "wx/init.h" #include "wx/thread.h" -#include "wx/ptr_scpd.h" +#include "wx/scopedptr.h" #include "wx/except.h" #if defined(__WXMSW__) && defined(__WXDEBUG__) @@ -63,8 +63,9 @@ public: wxDummyConsoleApp() { } virtual int OnRun() { wxFAIL_MSG( _T("unreachable code") ); return 0; } + virtual bool DoYield(bool, long) { return true; } - DECLARE_NO_COPY_CLASS(wxDummyConsoleApp) + wxDECLARE_NO_COPY_CLASS(wxDummyConsoleApp); }; // we need a special kind of auto pointer to wxApp which not only deletes the @@ -93,7 +94,7 @@ public: wxApp::SetInstance(ptr); } - DECLARE_NO_COPY_CLASS(wxAppPtr) + wxDECLARE_NO_COPY_CLASS(wxAppPtr); }; // class to ensure that wxAppBase::CleanUp() is called if our Initialize() @@ -160,7 +161,7 @@ static struct InitData wchar_t **argv; #endif // wxUSE_UNICODE - DECLARE_NO_COPY_CLASS(InitData) + wxDECLARE_NO_COPY_CLASS(InitData); } gs_initData; // ============================================================================ @@ -249,6 +250,44 @@ static bool DoCommonPostInit() return false; } +#if defined(__WXDEBUG__) + // check if event classes implement Clone() correctly + // NOTE: the check is done against _all_ event classes which are linked to + // the executable currently running, which are not necessarily all + // wxWidgets event classes. + const wxClassInfo *ci = wxClassInfo::GetFirst(); + for (; ci; ci = ci->GetNext()) + { + // is this class derived from wxEvent? + if (!ci->IsKindOf(CLASSINFO(wxEvent)) || wxString(ci->GetClassName()) == "wxEvent") + continue; + + if (!ci->IsDynamic()) + { + wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!", + ci->GetClassName()); + continue; + } + + // yes; test if it implements Clone() correctly + wxEvent* test = wxDynamicCast(ci->CreateObject(),wxEvent); + if (test == NULL) + { + wxLogWarning("The event class '%s' should have a DECLARE_DYNAMIC_CLASS macro!", + ci->GetClassName()); + continue; + } + + wxEvent* cloned = test->Clone(); + if (!cloned || cloned->GetClassInfo() != ci) + wxLogWarning("The event class '%s' does not correctly implement Clone()!", + ci->GetClassName()); + + delete cloned; + delete test; + } +#endif + return true; }