summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modinfodialog.cpp9
-rw-r--r--src/settings.cpp27
-rw-r--r--src/settings.h2
-rw-r--r--src/settingsutilities.cpp18
-rw-r--r--src/settingsutilities.h6
5 files changed, 51 insertions, 11 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 2178ef34..c7e071ad 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -383,9 +383,12 @@ void ModInfoDialog::reAddTabs(
// ordered tab names from settings
const auto orderedNames = m_core->settings().geometry().modInfoTabOrder();
- // whether the tabs can be sorted; if the object name of a tab widget is not
- // found in orderedNames, the list cannot be sorted safely
- bool canSort = true;
+ // whether the tabs can be sorted
+ //
+ // if the object name of a tab widget is not found in orderedNames, the list
+ // cannot be sorted safely; if the list is empty, it's probably a first run
+ // and there's nothing to sort
+ bool canSort = !orderedNames.empty();
// gathering visible tabs
std::vector<TabInfo*> visibleTabs;
diff --git a/src/settings.cpp b/src/settings.cpp
index 8ae7c343..a33005b6 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -210,7 +210,7 @@ std::vector<std::map<QString, QVariant>> Settings::executables() const
std::map<QString, QVariant> map;
for (auto&& key : sra.keys()) {
- map[key] = m_Settings.value(key);
+ map[key] = sra.get<QVariant>(key);
}
v.push_back(map);
@@ -693,7 +693,7 @@ QStringList GeometrySettings::modInfoTabOrder() const
}
} else {
// string list since 2.2.1
- QString string = m_Settings.value("mod_info_tab_order").toString();
+ QString string = get<QString>(m_Settings, "Widgets", "ModInfoTabOrder", "");
QTextStream stream(&string);
while (!stream.atEnd()) {
@@ -708,7 +708,7 @@ QStringList GeometrySettings::modInfoTabOrder() const
void GeometrySettings::setModInfoTabOrder(const QString& names)
{
- set(m_Settings, "Geometry", "mod_info_tab_order", names);
+ set(m_Settings, "Widgets", "ModInfoTabOrder", names);
}
void GeometrySettings::centerOnMainWindowMonitor(QWidget* w)
@@ -1061,13 +1061,21 @@ void PluginSettings::clearPlugins()
{
m_Plugins.clear();
m_PluginSettings.clear();
-
m_PluginBlacklist.clear();
+ m_PluginBlacklist = readPluginBlacklist();
+}
+
+QSet<QString> PluginSettings::readPluginBlacklist() const
+{
+ QSet<QString> set;
+
ScopedReadArray sra(m_Settings, "pluginBlacklist");
sra.for_each([&]{
- m_PluginBlacklist.insert(sra.get<QString>("name"));
+ set.insert(sra.get<QString>("name"));
});
+
+ return set;
}
void PluginSettings::registerPlugin(IPlugin *plugin)
@@ -1166,9 +1174,14 @@ void PluginSettings::addBlacklistPlugin(const QString &fileName)
void PluginSettings::writePluginBlacklist()
{
- removeSection(m_Settings, "pluginBlacklist");
+ const auto current = readPluginBlacklist();
+
+ if (current.size() > m_PluginBlacklist.size()) {
+ // Qt can't remove array elements, the section must be cleared
+ removeSection(m_Settings, "pluginBlacklist");
+ }
- ScopedWriteArray swa(m_Settings, "pluginBlacklist");
+ ScopedWriteArray swa(m_Settings, "pluginBlacklist", m_PluginBlacklist.size());
for (const QString &plugin : m_PluginBlacklist) {
swa.next();
diff --git a/src/settings.h b/src/settings.h
index 68cfb9b7..2ff8da1c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -261,8 +261,8 @@ private:
QMap<QString, QVariantMap> m_PluginDescriptions;
QSet<QString> m_PluginBlacklist;
- void readPluginBlacklist();
void writePluginBlacklist();
+ QSet<QString> readPluginBlacklist() const;
};
diff --git a/src/settingsutilities.cpp b/src/settingsutilities.cpp
index d5e2dd9a..7a9dcc35 100644
--- a/src/settingsutilities.cpp
+++ b/src/settingsutilities.cpp
@@ -4,8 +4,26 @@
using namespace MOBase;
+bool shouldLogSetting(const QString& displayName)
+{
+ // don't log Geometry/ and Widgets/, too noisy and not very useful
+ static const QStringList ignorePrefixes = {"Geometry/", "Widgets/"};
+
+ for (auto&& prefix : ignorePrefixes) {
+ if (displayName.startsWith(prefix, Qt::CaseInsensitive)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
void logRemoval(const QString& name)
{
+ if (!shouldLogSetting(name)) {
+ return;
+ }
+
log::debug("setting '{}' removed", name);
}
diff --git a/src/settingsutilities.h b/src/settingsutilities.h
index ca754759..d99abb06 100644
--- a/src/settingsutilities.h
+++ b/src/settingsutilities.h
@@ -24,10 +24,16 @@ struct ValueConverter<T, std::enable_if_t<std::is_enum_v<T>>>
};
+bool shouldLogSetting(const QString& displayName);
+
template <class T>
void logChange(
const QString& displayName, std::optional<T> oldValue, const T& newValue)
{
+ if (!shouldLogSetting(displayName)) {
+ return;
+ }
+
using VC = ValueConverter<T>;
if (oldValue) {