X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/aaa6d89a0d0810b001a9217df913b9b74b883c8d..63e02796620637b50a96d74a2264f3dea8def866:/src/common/config.cpp diff --git a/src/common/config.cpp b/src/common/config.cpp index 19885d4a39..16cc86d8f2 100644 --- a/src/common/config.cpp +++ b/src/common/config.cpp @@ -32,12 +32,12 @@ #include "wx/app.h" #include "wx/utils.h" #include "wx/arrstr.h" + #include "wx/math.h" #endif //WX_PRECOMP #if wxUSE_CONFIG && ((wxUSE_FILE && wxUSE_TEXTFILE) || wxUSE_CONFIG_NATIVE) #include "wx/file.h" -#include "wx/math.h" #include #include @@ -274,6 +274,21 @@ wxConfigPathChanger::wxConfigPathChanger(const wxConfigBase *pContainer, } } +void wxConfigPathChanger::UpdateIfDeleted() +{ + // we don't have to do anything at all if we didn't change the path + if ( !m_bChanged ) + return; + + // find the deepest still existing parent path of the original path + while ( !m_pContainer->HasGroup(m_strOldPath) ) + { + m_strOldPath = m_strOldPath.BeforeLast(wxCONFIG_PATH_SEPARATOR); + if ( m_strOldPath.empty() ) + m_strOldPath = wxCONFIG_PATH_SEPARATOR; + } +} + wxConfigPathChanger::~wxConfigPathChanger() { // only restore path if it was changed @@ -282,6 +297,24 @@ wxConfigPathChanger::~wxConfigPathChanger() } } +// this is a wxConfig method but it's mainly used with wxConfigPathChanger +/* static */ +wxString wxConfigBase::RemoveTrailingSeparator(const wxString& key) +{ + wxString path(key); + + // don't remove the only separator from a root group path! + while ( path.length() > 1 ) + { + if ( *path.rbegin() != wxCONFIG_PATH_SEPARATOR ) + break; + + path.erase(path.end() - 1); + } + + return path; +} + #endif // wxUSE_CONFIG // ---------------------------------------------------------------------------- @@ -354,7 +387,12 @@ wxString wxExpandEnvVars(const wxString& str) #ifdef __WXWINCE__ const wxChar *pszValue = NULL; #else - const wxChar *pszValue = wxGetenv(strVarName); + // NB: use wxGetEnv instead of wxGetenv as otherwise variables + // set through wxSetEnv may not be read correctly! + const wxChar *pszValue = NULL; + wxString tmp; + if (wxGetEnv(strVarName, &tmp)) + pszValue = tmp; #endif if ( pszValue != NULL ) { strResult += pszValue;