X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdc18790e34d17edfc02f3e25edcb3425b38a8a..0a89ac9c270bd792d36d3d08d156b69b101cf3dd:/src/mgl/app.cpp diff --git a/src/mgl/app.cpp b/src/mgl/app.cpp index d8b012870e..d9ff129be0 100644 --- a/src/mgl/app.cpp +++ b/src/mgl/app.cpp @@ -18,18 +18,27 @@ #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 //----------------------------------------------------------------------------- @@ -37,8 +46,6 @@ wxApp *wxTheApp = NULL; wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NULL; -static wxEventLoop *gs_mainEventLoop = NULL; - //----------------------------------------------------------------------------- // wxExit @@ -70,8 +77,11 @@ bool wxYield() 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 @@ -124,7 +134,7 @@ BEGIN_EVENT_TABLE(wxApp, wxEvtHandler) END_EVENT_TABLE() -wxApp::wxApp() +wxApp::wxApp() : m_mainLoop(NULL) { } @@ -134,8 +144,6 @@ wxApp::~wxApp() bool wxApp::OnInitGui() { - if ( MGL_init(".", NULL) == 0 ) - return FALSE; if ( !wxCreateMGL_WM() ) return FALSE; @@ -144,6 +152,12 @@ bool wxApp::OnInitGui() 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; } @@ -205,12 +219,8 @@ bool wxApp::SendIdleEvents(wxWindow* win) 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) @@ -226,30 +236,35 @@ 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); + 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() @@ -270,6 +285,9 @@ void wxApp::DeletePendingObjects() bool wxApp::Initialize() { + if ( MGL_init(".", NULL) == 0 ) + return FALSE; + wxBuffer = new wxChar[BUFSIZ + 512]; wxClassInfo::InitializeClasses(); @@ -289,6 +307,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 +375,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 +505,7 @@ int wxEntry(int argc, char *argv[]) call OnRun() */ wxTheApp->DeletePendingObjects(); - if ( wxTheApp->Initialized() && - wxTopLevelWindows.GetCount() != 0 ) + if ( wxTheApp->Initialized() ) { wxTheApp->OnRun();