X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdc18790e34d17edfc02f3e25edcb3425b38a8a..dbcbe229628c7667da2b6257198467d4f09ab28d:/src/mgl/app.cpp diff --git a/src/mgl/app.cpp b/src/mgl/app.cpp index d8b012870e..2027810bd5 100644 --- a/src/mgl/app.cpp +++ b/src/mgl/app.cpp @@ -28,6 +28,7 @@ #endif #include "wx/app.h" +#include "wx/fontutil.h" #include "wx/mgl/private.h" //----------------------------------------------------------------------------- @@ -37,8 +38,6 @@ wxApp *wxTheApp = NULL; wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL; -static wxEventLoop *gs_mainEventLoop = NULL; - //----------------------------------------------------------------------------- // wxExit @@ -70,8 +69,13 @@ bool wxYield() wxLog::Suspend(); - while (gs_mainEventLoop->Pending()) - gs_mainEventLoop->Dispatch(); + if ( wxEventLoop::GetActive() ) + { + while (wxEventLoop::GetActive()->Pending()) + wxEventLoop::GetActive()->Dispatch(); + } + else + MGL_wmUpdateDC(g_winMng); // FIXME_MGL -- temporary hack, please remove /* it's necessary to call ProcessIdle() to update the frames sizes which might have been changed (it also will update other things set from @@ -124,7 +128,7 @@ BEGIN_EVENT_TABLE(wxApp, wxEvtHandler) END_EVENT_TABLE() -wxApp::wxApp() +wxApp::wxApp() : m_mainLoop(NULL) { } @@ -226,30 +230,37 @@ bool wxApp::SendIdleEvents(wxWindow* win) 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() @@ -289,6 +300,9 @@ bool wxApp::Initialize() 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(); @@ -354,9 +368,12 @@ void wxApp::CleanUp() 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; @@ -481,8 +498,7 @@ int wxEntry(int argc, char *argv[]) call OnRun() */ wxTheApp->DeletePendingObjects(); - if ( wxTheApp->Initialized() && - wxTopLevelWindows.GetCount() != 0 ) + if ( wxTheApp->Initialized() ) { wxTheApp->OnRun();