X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cc845a614214e2ac62ddb3108ddc5c8306f304ac..d10e22fe8ad283f37b1809349028ffc282e393ce:/src/common/fmapbase.cpp diff --git a/src/common/fmapbase.cpp b/src/common/fmapbase.cpp index f148a5cd21..24ace1c214 100644 --- a/src/common/fmapbase.cpp +++ b/src/common/fmapbase.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: common/fmapbase.cpp +// Name: src/common/fmapbase.cpp // Purpose: wxFontMapperBase class implementation // Author: Vadim Zeitlin // Modified by: @@ -30,18 +30,18 @@ #include "wx/app.h" #include "wx/log.h" #include "wx/intl.h" + #include "wx/module.h" #endif //WX_PRECOMP #if defined(__WXMSW__) - #include "wx/msw/private.h" // includes windows.h for LOGFONT - #include "wx/msw/winundef.h" + #include "wx/msw/private.h" // includes windows.h for LOGFONT + #include "wx/msw/winundef.h" #endif #include "wx/fontmap.h" #include "wx/fmappriv.h" #include "wx/apptrait.h" -#include "wx/module.h" // wxMemoryConfig uses wxFileConfig #if wxUSE_CONFIG && wxUSE_FILECONFIG @@ -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 // ---------------------------------------------------------------------------- @@ -317,7 +344,7 @@ const wxChar *wxFontMapperBase::GetDefaultConfigPath() void wxFontMapperBase::SetConfigPath(const wxString& prefix) { - wxCHECK_RET( !prefix.IsEmpty() && prefix[0] == wxCONFIG_PATH_SEPARATOR, + wxCHECK_RET( !prefix.empty() && prefix[0] == wxCONFIG_PATH_SEPARATOR, wxT("an absolute path should be given to wxFontMapper::SetConfigPath()") ); m_configRootPath = prefix; @@ -372,7 +399,7 @@ bool wxFontMapperBase::ChangePath(const wxString& pathNew, wxString *pathOld) *pathOld = config->GetPath(); wxString path = GetConfigPath(); - if ( path.IsEmpty() || path.Last() != wxCONFIG_PATH_SEPARATOR ) + if ( path.empty() || path.Last() != wxCONFIG_PATH_SEPARATOR ) { path += wxCONFIG_PATH_SEPARATOR; } @@ -455,7 +482,7 @@ wxFontMapperBase::NonInteractiveCharsetToEncoding(const wxString& charset) config->SetPath(FONTMAPPER_CHARSET_ALIAS_PATH); wxString alias = config->Read(charset); - if ( !alias.IsEmpty() ) + if ( !alias.empty() ) { // yes, we do - use it instead cs = alias; @@ -704,4 +731,3 @@ wxFontEncoding wxFontMapperBase::GetEncodingFromName(const wxString& name) } #endif // wxUSE_FONTMAP -