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

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
(cherry picked from commit 3a4f7f51cf)
r14.0.x
Michele Calgaro 5 years ago
parent bc1bc13ea8
commit 5e120c0e2c
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -28,6 +28,7 @@
#include <tqtextstream.h>
#include <tdeapplication.h>
#include <tdeglobalsettings.h>
#include <tdeglobal.h>
#include <tdelocale.h>
#include <kcharsets.h>
@ -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<int>(aValue.length())) {
while( nDollarPos != -1 && (nDollarPos + 1) < static_cast<int>(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 <corwin@micom.don.ru> !!!
// 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++;

Loading…
Cancel
Save