+ wxLogError(_("Initialization failed in post init, aborting."));
+ 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;
+}
+
+bool wxEntryStart(int& argc, wxChar **argv)
+{
+ // do minimal, always necessary, initialization
+ // --------------------------------------------
+
+ // initialize wxRTTI
+ if ( !DoCommonPreInit() )
+ {
+ return false;
+ }
+
+
+ // first of all, we need an application object
+ // -------------------------------------------
+
+ // the user might have already created it himself somehow
+ wxAppPtr app(wxTheApp);
+ if ( !app.get() )
+ {
+ // if not, he might have used IMPLEMENT_APP() to give us a function to
+ // create it
+ wxAppInitializerFunction fnCreate = wxApp::GetInitializerFunction();
+
+ if ( fnCreate )
+ {
+ // he did, try to create the custom wxApp object
+ app.Set((*fnCreate)());
+ }
+ }
+
+ if ( !app.get() )
+ {
+ // either IMPLEMENT_APP() was not used at all or it failed -- in any
+ // case we still need something
+ app.Set(new wxDummyConsoleApp);