From 5e120c0e2c473f9ca64aac34823673d56d6c56c7 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Sun, 12 Jan 2020 01:21:43 +0900 Subject: [PATCH] Fix handling of XDG directories in TDEConfigBase. This relates to issue #60. Signed-off-by: Michele Calgaro (cherry picked from commit 3a4f7f51cfb88ab6b34918e8f79dea027d02b411) --- tdecore/tdeconfigbase.cpp | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/tdecore/tdeconfigbase.cpp b/tdecore/tdeconfigbase.cpp index 944ca646f..80baf3a0e 100644 --- a/tdecore/tdeconfigbase.cpp +++ b/tdecore/tdeconfigbase.cpp @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -274,9 +275,9 @@ TQString TDEConfigBase::readEntry( const char *pKey, // check for environment variables and make necessary translations int nDollarPos = aValue.find( '$' ); - while( nDollarPos != -1 && nDollarPos+1 < static_cast(aValue.length())) { + while( nDollarPos != -1 && (nDollarPos + 1) < static_cast(aValue.length())) { // there is at least one $ - if( (aValue)[nDollarPos+1] != '$' ) { + if( aValue[nDollarPos+1] != '$' ) { uint nEndPos = nDollarPos+1; // the next character is no $ TQString aVarName; @@ -294,17 +295,42 @@ TQString TDEConfigBase::readEntry( const char *pKey, nEndPos++; aVarName = aValue.mid( nDollarPos+1, nEndPos-nDollarPos-1 ); } - const char* pEnv = 0; + const char *pEnv = 0; if (!aVarName.isEmpty()) pEnv = getenv( aVarName.ascii() ); - if( pEnv ) { + if (pEnv) { // !!! Sergey A. Sukiyazov !!! // A environment variables may contain values in 8bit // locale cpecified encoding or in UTF8 encoding. aValue.replace( nDollarPos, nEndPos-nDollarPos, KStringHandler::from8Bit( pEnv ) ); - } else + } + else if (aVarName.length() > 8 && aVarName.startsWith("XDG_") && aVarName.endsWith("_DIR")) { + TQString result; + if (aVarName == "XDG_DESKTOP_DIR") { + result = TDEGlobalSettings::desktopPath(); + } + else if (aVarName == "XDG_DOCUMENTS_DIR") { + result = TDEGlobalSettings::documentPath(); + } + else if (aVarName == "XDG_DOWNLOAD_DIR") { + result = TDEGlobalSettings::downloadPath(); + } + else if (aVarName == "XDG_MUSIC_DIR") { + result = TDEGlobalSettings::musicPath(); + } + else if (aVarName == "XDG_PICTURES_DIR") { + result = TDEGlobalSettings::picturesPath(); + } + else if (aVarName == "XDG_VIDEOS_DIR") { + result = TDEGlobalSettings::videosPath(); + } + aValue.replace( nDollarPos, nEndPos-nDollarPos, result ); + } + else { aValue.remove( nDollarPos, nEndPos-nDollarPos ); - } else { + } + } + else { // remove one of the dollar signs aValue.remove( nDollarPos, 1 ); nDollarPos++;