Fix handling of XDG directories in TDEConfigBase. This relates to issue #60.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/61/head
Michele Calgaro 5 years ago
parent d4845ced49
commit 3a4f7f51cf
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -28,6 +28,7 @@
#include <tqtextstream.h> #include <tqtextstream.h>
#include <tdeapplication.h> #include <tdeapplication.h>
#include <tdeglobalsettings.h>
#include <tdeglobal.h> #include <tdeglobal.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <kcharsets.h> #include <kcharsets.h>
@ -274,9 +275,9 @@ TQString TDEConfigBase::readEntry( const char *pKey,
// check for environment variables and make necessary translations // check for environment variables and make necessary translations
int nDollarPos = aValue.find( '$' ); int nDollarPos = aValue.find( '$' );
while( nDollarPos != -1 && nDollarPos+1 < static_cast<int>(aValue.length())) { while( nDollarPos != -1 && (nDollarPos + 1) < static_cast<int>(aValue.length())) {
// there is at least one $ // there is at least one $
if( (aValue)[nDollarPos+1] != '$' ) { if( aValue[nDollarPos+1] != '$' ) {
uint nEndPos = nDollarPos+1; uint nEndPos = nDollarPos+1;
// the next character is no $ // the next character is no $
TQString aVarName; TQString aVarName;
@ -294,17 +295,42 @@ TQString TDEConfigBase::readEntry( const char *pKey,
nEndPos++; nEndPos++;
aVarName = aValue.mid( nDollarPos+1, nEndPos-nDollarPos-1 ); aVarName = aValue.mid( nDollarPos+1, nEndPos-nDollarPos-1 );
} }
const char* pEnv = 0; const char *pEnv = 0;
if (!aVarName.isEmpty()) if (!aVarName.isEmpty())
pEnv = getenv( aVarName.ascii() ); pEnv = getenv( aVarName.ascii() );
if( pEnv ) { if (pEnv) {
// !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!! // !!! Sergey A. Sukiyazov <corwin@micom.don.ru> !!!
// A environment variables may contain values in 8bit // A environment variables may contain values in 8bit
// locale cpecified encoding or in UTF8 encoding. // locale cpecified encoding or in UTF8 encoding.
aValue.replace( nDollarPos, nEndPos-nDollarPos, KStringHandler::from8Bit( pEnv ) ); 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 ); aValue.remove( nDollarPos, nEndPos-nDollarPos );
} else { }
}
else {
// remove one of the dollar signs // remove one of the dollar signs
aValue.remove( nDollarPos, 1 ); aValue.remove( nDollarPos, 1 );
nDollarPos++; nDollarPos++;

Loading…
Cancel
Save