diff options
| -rw-r--r-- | autotests/kconfigtest.cpp | 27 | ||||
| -rw-r--r-- | autotests/kconfigtest.h | 2 | ||||
| -rw-r--r-- | src/core/kconfigdata.cpp | 4 | ||||
| -rw-r--r-- | src/core/kconfigdata.h | 7 | ||||
| -rw-r--r-- | src/core/kconfigini.cpp | 5 | 
5 files changed, 43 insertions, 2 deletions
| diff --git a/autotests/kconfigtest.cpp b/autotests/kconfigtest.cpp index 736274c6..4d38b150 100644 --- a/autotests/kconfigtest.cpp +++ b/autotests/kconfigtest.cpp @@ -1949,3 +1949,30 @@ void KConfigTest::testNotify()      QCOMPARE(otherWatcherSpy[0][0].value<KConfigGroup>().name(), QStringLiteral("TopLevelGroup"));      QCOMPARE(otherWatcherSpy[0][1].value<QByteArrayList>(), QByteArrayList({"someGlobalEntry"}));  } + +void KConfigTest::testKdeglobalsVsDefault() +{ +    // Add testRestore key with global value in kdeglobals +    KConfig glob(QStringLiteral("kdeglobals")); +    KConfigGroup generalGlob(&glob, "General"); +    generalGlob.writeEntry("testRestore", "global"); +    QVERIFY(glob.sync()); + +    KConfig local(QStringLiteral(TEST_SUBDIR "restorerc")); +    KConfigGroup generalLocal(&local, "General"); +    // Check if we get global and not the default value from cpp (defaultcpp) when reading data from restorerc +    QCOMPARE(generalLocal.readEntry("testRestore", "defaultcpp"), "global"); + +    // Add test restore key with restore value in restorerc file +    generalLocal.writeEntry("testRestore", "restore"); +    QVERIFY(local.sync()); +    local.reparseConfiguration(); +    // We expect to get the value from restorerc file +    QCOMPARE(generalLocal.readEntry("testRestore", "defaultcpp"), "restore"); + +    // Revert to default testRestore key and we expect to get default value and not the global one +    generalLocal.revertToDefault("testRestore"); +    local.sync(); +    local.reparseConfiguration(); +    QCOMPARE(generalLocal.readEntry("testRestore", "defaultcpp"), "defaultcpp"); +} diff --git a/autotests/kconfigtest.h b/autotests/kconfigtest.h index e97e4a5d..7617d0e7 100644 --- a/autotests/kconfigtest.h +++ b/autotests/kconfigtest.h @@ -73,6 +73,8 @@ private Q_SLOTS:      void testThreads(); +    void testKdeglobalsVsDefault(); +      // should be last      void testSyncOnExit();  }; diff --git a/src/core/kconfigdata.cpp b/src/core/kconfigdata.cpp index bfa662a0..5ead8167 100644 --- a/src/core/kconfigdata.cpp +++ b/src/core/kconfigdata.cpp @@ -100,6 +100,10 @@ bool KEntryMap::setEntry(const QByteArray &group, const QByteArray &key, const Q          k = it.key();          e = *it;          //qDebug() << "found existing entry for key" << k; +        // If overridden entry is global and not default. And it's overridden by a non global +        if (e.bGlobal && !(options & EntryGlobal) && !k.bDefault) { +            e.bOverridesGlobal = true; +        }      } else {          // make sure the group marker is in the map          KEntryMap const *that = this; diff --git a/src/core/kconfigdata.h b/src/core/kconfigdata.h index d92076d9..2f36b1bb 100644 --- a/src/core/kconfigdata.h +++ b/src/core/kconfigdata.h @@ -24,7 +24,7 @@ struct KEntry {      KEntry()          : mValue(), bDirty(false),            bGlobal(false), bImmutable(false), bDeleted(false), bExpand(false), bReverted(false), -          bLocalizedCountry(false), bNotify(false) {} +          bLocalizedCountry(false), bNotify(false), bOverridesGlobal(false) {}      /** @internal */      QByteArray mValue;      /** @@ -58,6 +58,11 @@ struct KEntry {      bool    bLocalizedCountry: 1;      bool     bNotify: 1; + +    /** +     * Entry will need to be written on a non global file even if it matches default value +     */ +    bool     bOverridesGlobal: 1;  };  // These operators are used to check whether an entry which is about diff --git a/src/core/kconfigini.cpp b/src/core/kconfigini.cpp index 2cea7338..9601d036 100644 --- a/src/core/kconfigini.cpp +++ b/src/core/kconfigini.cpp @@ -429,7 +429,10 @@ bool KConfigIniBackend::writeConfig(const QByteArray &locale, KEntryMap &entryMa          // only write entries that have the same "globality" as the file          if (it->bGlobal == bGlobal) { -            if (it->bReverted) { +            if (it->bReverted && it->bOverridesGlobal) { +                it->bDeleted = true; +                writeMap[key] = *it; +            } else if (it->bReverted) {                  writeMap.remove(key);              } else if (!it->bDeleted) {                  writeMap[key] = *it; | 
