#pragma hdrstop
#endif
+
#ifndef WX_PRECOMP
#include "wx/settings.h"
#include "wx/module.h"
#include "wx/evtloop.h"
#include "wx/frame.h"
#include "wx/dialog.h"
+ #include "wx/log.h"
#include "wx/intl.h"
#endif
#include "wx/app.h"
+#include "wx/fontutil.h"
#include "wx/mgl/private.h"
+#define MGL_DEBUG
+
+#if defined(MGL_DEBUG) && !defined(__WXDEBUG__)
+#undef MGL_DEBUG
+#endif
+
//-----------------------------------------------------------------------------
// Global data
//-----------------------------------------------------------------------------
wxApp *wxTheApp = NULL;
wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL;
-static wxEventLoop *gs_mainEventLoop = NULL;
-
//-----------------------------------------------------------------------------
// wxExit
wxLog::Suspend();
- while (gs_mainEventLoop->Pending())
- gs_mainEventLoop->Dispatch();
+ if ( wxEventLoop::GetActive() )
+ {
+ while (wxEventLoop::GetActive()->Pending())
+ wxEventLoop::GetActive()->Dispatch();
+ }
/* it's necessary to call ProcessIdle() to update the frames sizes which
might have been changed (it also will update other things set from
END_EVENT_TABLE()
-wxApp::wxApp()
+wxApp::wxApp() : m_mainLoop(NULL)
{
}
if ( !wxAppBase::OnInitGui() )
return FALSE;
+#ifdef MGL_DEBUG
+ // That damn MGL redirects stdin and stdout to physical console
+ FILE *file = fopen("stderr", "wt");
+ wxLog::SetActiveTarget(new wxLogStderr(file));
+#endif
+
return TRUE;
}
win->GetEventHandler()->ProcessEvent(event);
-#if 0 // FIXME_MGL - what the hell it is?
- win->OnInternalIdle();
-
if ( event.MoreRequested() )
needMore = TRUE;
-#endif
wxNode* node = win->GetChildren().First();
while (node)
int wxApp::MainLoop()
{
- gs_mainEventLoop = new wxEventLoop;
- return gs_mainEventLoop->Run();
- delete gs_mainEventLoop;
- gs_mainEventLoop = NULL;
+ int rt;
+ m_mainLoop = new wxEventLoop;
+
+ rt = m_mainLoop->Run();
+
+ delete m_mainLoop;
+ m_mainLoop = NULL;
+ return rt;
}
void wxApp::ExitMainLoop()
{
- gs_mainEventLoop->Exit(0);
+ if ( m_mainLoop )
+ m_mainLoop->Exit(0);
}
bool wxApp::Initialized()
{
- return (GetTopWindow() != NULL);
+ // FIXME_MGL -- only for now because we don't have wxFrame/wxDialog yet
+ return TRUE;
+ //return (wxTopLevelWindows.GetCount() != 0);
}
bool wxApp::Pending()
{
- return gs_mainEventLoop->Pending();
+ return wxEventLoop::GetActive()->Pending();
}
void wxApp::Dispatch()
{
- gs_mainEventLoop->Dispatch();
+ wxEventLoop::GetActive()->Dispatch();
}
void wxApp::DeletePendingObjects()
wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
wxTheColourDatabase->Initialize();
+
+ // Can't do this in wxModule, because fonts are needed by stock lists
+ wxTheFontsManager = new wxFontsManager;
wxInitializeStockLists();
wxInitializeStockObjects();
wxTheColourDatabase = (wxColourDatabase*) NULL;
wxDeleteStockObjects();
-
wxDeleteStockLists();
+ // Can't do this in wxModule, because fonts are needed by stock lists
+ delete wxTheFontsManager;
+ wxTheFontsManager = (wxFontsManager*) NULL;
+
delete wxTheApp;
wxTheApp = (wxApp*) NULL;
call OnRun() */
wxTheApp->DeletePendingObjects();
- if ( wxTheApp->Initialized() &&
- wxTopLevelWindows.GetCount() != 0 )
+ if ( wxTheApp->Initialized() )
{
wxTheApp->OnRun();