diff --git a/src/plugins/coreplugin/settingsdatabase.cpp b/src/plugins/coreplugin/settingsdatabase.cpp index 881fa2f45962c9729892b7f116422ee89d0ebedc..b26cb188f3a66a74895cb09ec596d674cdc0864e 100644 --- a/src/plugins/coreplugin/settingsdatabase.cpp +++ b/src/plugins/coreplugin/settingsdatabase.cpp @@ -49,7 +49,7 @@ using namespace Core; using namespace Core::Internal; -enum { debug_settings = 1 }; +enum { debug_settings = 0 }; namespace Core { namespace Internal { @@ -67,7 +67,7 @@ public: QString effectiveKey(const QString &key) const { QString g = effectiveGroup(); - if (!g.isEmpty()) + if (!g.isEmpty() && !key.isEmpty()) g += QLatin1Char('/'); g += key; return g; @@ -181,8 +181,25 @@ bool SettingsDatabase::contains(const QString &key) const void SettingsDatabase::remove(const QString &key) { - Q_UNUSED(key); - // TODO: Remove key and all subkeys + const QString effectiveKey = d->effectiveKey(key); + + // Delete keys from the database + QSqlQuery query(d->m_db); + query.prepare(QLatin1String("DELETE FROM settings WHERE key = ? OR key LIKE ?")); + query.addBindValue(effectiveKey); + query.addBindValue(effectiveKey + QLatin1String("/%")); + query.exec(); + + // Remove keys from the cache + foreach (const QString &k, d->m_settings.keys()) { + // Either it's an exact match, or it matches up to a / + if (k.startsWith(effectiveKey) + && (k.length() == effectiveKey.length() + || k.at(effectiveKey.length()) == QLatin1Char('/'))) + { + d->m_settings.remove(k); + } + } } void SettingsDatabase::beginGroup(const QString &prefix) diff --git a/src/plugins/quickopen/quickopenplugin.cpp b/src/plugins/quickopen/quickopenplugin.cpp index 9640e8f08ec97f50e4cbe3fe2b56e8a81801ea2a..ae64e8dfe5132640f30b703565dc107fd2bb703f 100644 --- a/src/plugins/quickopen/quickopenplugin.cpp +++ b/src/plugins/quickopen/quickopenplugin.cpp @@ -206,8 +206,8 @@ void QuickOpenPlugin::saveSettings() if (core && core->settingsDatabase()) { Core::SettingsDatabase *s = core->settingsDatabase(); s->beginGroup("QuickOpen"); - s->setValue("RefreshInterval", refreshInterval()); s->remove(""); + s->setValue("RefreshInterval", refreshInterval()); foreach (IQuickOpenFilter *filter, m_filters) { if (!m_customFilters.contains(filter)) s->setValue(filter->name(), filter->saveState());