X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cc845a614214e2ac62ddb3108ddc5c8306f304ac..2d672c46c0c68ae560a537eacd3614b4114d73d4:/src/common/fmapbase.cpp diff --git a/src/common/fmapbase.cpp b/src/common/fmapbase.cpp index f148a5cd21..ccf7de0844 100644 --- a/src/common/fmapbase.cpp +++ b/src/common/fmapbase.cpp @@ -233,8 +233,25 @@ class wxFontMapperModule : public wxModule { public: wxFontMapperModule() : wxModule() { } - virtual bool OnInit() { return true; } - virtual void OnExit() { delete (wxFontMapperBase*)wxFontMapperBase::Set(NULL); } + + virtual bool OnInit() + { + // a dummy wxFontMapperBase object could have been created during the + // program startup before wxApp was created, we have to delete it to + // allow creating the real font mapper next time it is needed now that + // we can create it (when the modules are initialized, wxApp object + // already exists) + wxFontMapperBase *fm = wxFontMapperBase::Get(); + if ( fm && fm->IsDummy() ) + wxFontMapperBase::Reset(); + + return true; + } + + virtual void OnExit() + { + wxFontMapperBase::Reset(); + } DECLARE_DYNAMIC_CLASS(wxFontMapperModule) }; @@ -267,9 +284,6 @@ wxFontMapperBase::~wxFontMapperBase() #endif // wxUSE_CONFIG } -bool wxFontMapperBase::IsWxFontMapper() -{ return false; } - /* static */ wxFontMapperBase *wxFontMapperBase::Get() { @@ -303,6 +317,19 @@ wxFontMapper *wxFontMapperBase::Set(wxFontMapper *mapper) return old; } +/* static */ +void wxFontMapperBase::Reset() +{ + if ( sm_instance ) + { + // we need a cast as wxFontMapper is not fully declared here and so the + // compiler can't know that it derives from wxFontMapperBase (but + // run-time behaviour will be correct because the dtor is virtual) + delete (wxFontMapperBase *)sm_instance; + sm_instance = NULL; + } +} + #if wxUSE_CONFIG && wxUSE_FILECONFIG // ----------------------------------------------------------------------------