diff options
author | Jeremie Graulle <jgraulle@gmail.com> | 2020-07-02 01:43:10 +0200 |
---|---|---|
committer | Andy Shaw <andy.shaw@qt.io> | 2021-12-27 10:41:43 +0100 |
commit | 3162f04deefaa07f1efe52f096d5bf9f560a6191 (patch) | |
tree | 0509788386c363c63d76865fdfee61bc84d490f9 | |
parent | be5508fad068f422fd88b82c11db71bcc26f248f (diff) |
Windows: Fix handling of childGroups() when fallbacks are disabled
When fallbacks are disabled for QSettings then it should not be
falling back to any child groups or keys that might exist in a
fallback set of settings.
Fixes: QTBUG-85295
Change-Id: I563999293a103702035c8d3b027b59b94ca43c0e
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r-- | src/corelib/io/qsettings_win.cpp | 14 | ||||
-rw-r--r-- | tests/auto/corelib/io/qsettings/tst_qsettings.cpp | 10 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/corelib/io/qsettings_win.cpp b/src/corelib/io/qsettings_win.cpp index caa8c84f24..00a333098d 100644 --- a/src/corelib/io/qsettings_win.cpp +++ b/src/corelib/io/qsettings_win.cpp @@ -759,11 +759,17 @@ QStringList QWinSettingsPrivate::children(const QString &uKey, ChildSpec spec) c for (const RegistryKey &r : regList) { HKEY parent_handle = r.handle(); - if (parent_handle == 0) - continue; + if (parent_handle == 0) { + if (fallbacks) + continue; + break; + } HKEY handle = openKey(parent_handle, KEY_READ, rKey, access); - if (handle == 0) - continue; + if (handle == 0) { + if (fallbacks) + continue; + break; + } if (spec == AllKeys) { NameSet keys; diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp index 094d04252b..48087b6a65 100644 --- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp +++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp @@ -2018,6 +2018,16 @@ void tst_QSettings::testChildKeysAndGroups() l.sort(); QCOMPARE(l, QStringList() << "bar" << "foo"); } + { + QSettings settings3(format, QSettings::UserScope, "software.org", "application"); + settings3.setFallbacksEnabled(false); + settings3.beginGroup("alpha"); + QCOMPARE(settings3.childGroups(), QStringList()); + settings3.setFallbacksEnabled(true); + QStringList children = settings3.childGroups(); + children.sort(); + QCOMPARE(children, QStringList({"beta", "gamma"})); + } } void tst_QSettings::testUpdateRequestEvent() |