From kde-commits Sat Mar 28 22:30:22 2009 From: Oswald Buddenhagen Date: Sat, 28 Mar 2009 22:30:22 +0000 To: kde-commits Subject: KDE/kdelibs/kdecore/config Message-Id: <1238279422.286601.5947.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=123827942916758 SVN commit 946232 by ossi: refresh the config file list on each reparse both we (trivial) or others (non-trivial) could have added new files. this fixes a regression for local files from the last commit and makes it work for global files in the first place. M +35 -31 kconfig.cpp M +2 -2 kconfig_p.h --- trunk/KDE/kdelibs/kdecore/config/kconfig.cpp #946231:946232 @@ -60,29 +60,24 @@ componentData(componentData_), configState(KConfigBase::NoAccess) { sGlobalFileName = componentData.dirs()->saveLocation("config") + QLatin1String("kdeglobals"); - const KStandardDirs *const dirs = componentData.dirs(); - foreach (const QString& dir1, dirs->findAllResources("config", QLatin1String("kdeglobals"))) - globalFiles.push_front(dir1); - foreach (const QString& dir2, dirs->findAllResources("config", QLatin1String("system.kdeglobals"))) - globalFiles.push_front(dir2); - const QString etc_kderc = + + etc_kderc = #ifdef Q_WS_WIN QFile::decodeName( qgetenv("WINDIR") + "/kde4rc" ); #else QLatin1String("/etc/kde4rc"); #endif + if (!KStandardDirs::checkAccess(etc_kderc, R_OK)) { + etc_kderc.clear(); + } + KEntryMap tmp; - // first entry is always /etc/kderc or empty if cannot read - if (KStandardDirs::checkAccess(etc_kderc, R_OK)) { - if (!globalFiles.contains(etc_kderc)) - globalFiles.push_front(etc_kderc); - + if (!etc_kderc.isEmpty()) { if (!mappingsRegistered) { KSharedPtr backend = KConfigBackend::create(componentData, etc_kderc, QLatin1String("INI")); backend->parseConfig( "en_US", tmp, KConfigBackend::ParseDefaults); } } else { - globalFiles.push_front(QString()); mappingsRegistered = true; } @@ -423,23 +418,7 @@ return; } - localFiles.clear(); - if (file == sGlobalFileName) { - bSuppressGlobal = true; - if (wantDefaults()) { - localFiles = globalFiles; - } else { - localFiles << file; - } - } else { - bSuppressGlobal = false; - if (wantDefaults()) { - foreach (const QString& f, componentData.dirs()->findAllResources(resourceType, fileName)) - localFiles.prepend(f); - } else { - localFiles << file; - } - } + bSuppressGlobal = (file == sGlobalFileName); if (bDynamicBackend || !mBackend) // allow dynamic changing of backend mBackend = KConfigBackend::create(componentData, file); @@ -467,8 +446,23 @@ d->parseConfigFiles(); } + +QStringList KConfigPrivate::getGlobalFiles() const +{ + const KStandardDirs *const dirs = componentData.dirs(); + QStringList globalFiles; + foreach (const QString& dir1, dirs->findAllResources("config", QLatin1String("kdeglobals"))) + globalFiles.push_front(dir1); + foreach (const QString& dir2, dirs->findAllResources("config", QLatin1String("system.kdeglobals"))) + globalFiles.push_front(dir2); + if (!etc_kderc.isEmpty()) + globalFiles.push_front(etc_kderc); + return globalFiles; +} + void KConfigPrivate::parseGlobalFiles() { + QStringList globalFiles = getGlobalFiles(); // qDebug() << "parsing global files" << globalFiles; // TODO: can we cache the values in etc_kderc / other global files @@ -493,9 +487,19 @@ bFileImmutable = false; QList files; + if (wantDefaults()) { + if (bSuppressGlobal) { + files = getGlobalFiles(); + } else { + foreach (const QString& f, componentData.dirs()->findAllResources( + resourceType, mBackend->filePath())) + files.prepend(f); + } + } else { + files << mBackend->filePath(); + } if (!isSimple()) - files = extraFiles.toList(); - files += localFiles; + files = extraFiles.toList() + files; // qDebug() << "parsing local files" << files; --- trunk/KDE/kdelibs/kdecore/config/kconfig_p.h #946231:946232 @@ -87,12 +87,11 @@ KEntryMap entryMap; QString backendType; - QStringList globalFiles; - QStringList localFiles; QStack extraFiles; QString locale; QString fileName; + QString etc_kderc; KComponentData componentData; KConfigBase::AccessMode configState; @@ -102,6 +101,7 @@ bool isReadOnly() const { return configState == KConfig::ReadOnly; } bool setLocale(const QString& aLocale); + QStringList getGlobalFiles() const; void parseGlobalFiles(); void parseConfigFiles(); void initCustomized(KConfig*);