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)
v3.5.13-sru
Michele Calgaro 5 years ago committed by Slávek Banko
parent f2c4b9b2fc
commit fb65a4b212
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -28,6 +28,7 @@
#include <tqtextstream.h>
#include <kapplication.h>
#include <kglobalsettings.h>
#include <kglobal.h>
#include <klocale.h>
#include <kcharsets.h>
@ -274,9 +275,9 @@ TQString KConfigBase::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 KConfigBase::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 = KGlobalSettings::desktopPath();
}
else if (aVarName == "XDG_DOCUMENTS_DIR") {
result = KGlobalSettings::documentPath();
}
else if (aVarName == "XDG_DOWNLOAD_DIR") {
result = KGlobalSettings::downloadPath();
}
else if (aVarName == "XDG_MUSIC_DIR") {
result = KGlobalSettings::musicPath();
}
else if (aVarName == "XDG_PICTURES_DIR") {
result = KGlobalSettings::picturesPath();
}
else if (aVarName == "XDG_VIDEOS_DIR") {
result = KGlobalSettings::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