[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kdecore/config
From:       Oswald Buddenhagen <ossi () kde ! org>
Date:       2009-03-28 22:30:22
Message-ID: 1238279422.286601.5947.nullmailer () svn ! kde ! org
[Download RAW message or body]

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<KConfigBackend> 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<QString> 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<QString> 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*);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic