+#include "wx/vidmode.h"
+#include "wx/evtloop.h"
+
+#if wxUSE_FONTMAP
+ #include "wx/fontmap.h"
+#endif // wxUSE_FONTMAP
+
+// DLL options compatibility check:
+#include "wx/build.h"
+WX_CHECK_BUILD_OPTIONS("wxCore")
+
+// ============================================================================
+// wxAppBase implementation
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// initialization
+// ----------------------------------------------------------------------------
+
+wxAppBase::wxAppBase()
+{
+ m_topWindow = NULL;
+
+ m_useBestVisual = false;
+ m_forceTrueColour = false;
+
+ m_isActive = true;
+
+ // We don't want to exit the app if the user code shows a dialog from its
+ // OnInit() -- but this is what would happen if we set m_exitOnFrameDelete
+ // to Yes initially as this dialog would be the last top level window.
+ // OTOH, if we set it to No initially we'll have to overwrite it with Yes
+ // when we enter our OnRun() because we do want the default behaviour from
+ // then on. But this would be a problem if the user code calls
+ // SetExitOnFrameDelete(false) from OnInit().
+ //
+ // So we use the special "Later" value which is such that
+ // GetExitOnFrameDelete() returns false for it but which we know we can
+ // safely (i.e. without losing the effect of the users SetExitOnFrameDelete
+ // call) overwrite in OnRun()
+ m_exitOnFrameDelete = Later;
+}
+
+bool wxAppBase::Initialize(int& argcOrig, wxChar **argvOrig)
+{
+#ifdef __WXOSX__
+ // Mac OS X passes a process serial number command line argument when
+ // the application is launched from the Finder. This argument must be
+ // removed from the command line arguments before being handled by the
+ // application (otherwise applications would need to handle it)
+ //
+ // Notice that this has to be done for all ports that can be used under OS
+ // X (e.g. wxGTK) and not just wxOSX itself, hence this code is here and
+ // not in a port-specific file.
+ if ( argcOrig > 1 )
+ {
+ static const wxChar *ARG_PSN = wxT("-psn_");
+ if ( wxStrncmp(argvOrig[1], ARG_PSN, wxStrlen(ARG_PSN)) == 0 )
+ {
+ // remove this argument
+ --argcOrig;
+ memmove(argvOrig + 1, argvOrig + 2, argcOrig * sizeof(wxChar*));
+ }
+ }
+#endif // __WXOSX__
+
+ if ( !wxAppConsole::Initialize(argcOrig, argvOrig) )
+ return false;
+
+ wxInitializeStockLists();
+
+ wxBitmap::InitStandardHandlers();
+
+ // for compatibility call the old initialization function too
+ if ( !OnInitGui() )
+ return false;
+
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// cleanup
+// ----------------------------------------------------------------------------
+
+wxAppBase::~wxAppBase()
+{
+ // this destructor is required for Darwin
+}
+
+void wxAppBase::CleanUp()
+{
+ // clean up all the pending objects
+ DeletePendingObjects();
+
+ // and any remaining TLWs (they remove themselves from wxTopLevelWindows
+ // when destroyed, so iterate until none are left)
+ while ( !wxTopLevelWindows.empty() )
+ {
+ // do not use Destroy() here as it only puts the TLW in pending list
+ // but we want to delete them now
+ delete wxTopLevelWindows.GetFirst()->GetData();
+ }
+
+ // undo everything we did in Initialize() above
+ wxBitmap::CleanUpHandlers();
+
+ wxStockGDI::DeleteAll();
+
+ wxDeleteStockLists();
+
+ wxDELETE(wxTheColourDatabase);
+
+ wxAppConsole::CleanUp();
+}