summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-12-28 04:17:16 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-12-28 04:17:16 -0500
commit462ea08c348b6c524691e435ea7fb911ffd2367e (patch)
treeea8cdf4a40fd463a4304e31d116ede6c66bf948d /src
parent3c62a048da24ae58d5d9d490914ba9e8dbdc89f0 (diff)
fixed warning about ini files with utf8 bom
fixed main thread name still getting clobbered by QWebEngine
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/moapplication.cpp3
-rw-r--r--src/settings.cpp29
3 files changed, 32 insertions, 4 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 6c3801da..37e0027d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -286,6 +286,10 @@ MainWindow::MainWindow(Settings &settings
QWebEngineProfile::defaultProfile()->setCachePath(settings.paths().cache());
QWebEngineProfile::defaultProfile()->setPersistentStoragePath(settings.paths().cache());
+ // qt resets the thread name somewhere within the QWebEngineProfile calls
+ // above
+ MOShared::SetThisThreadName("main");
+
ui->setupUi(this);
languageChange(settings.interface().language());
ui->statusBar->setup(ui, settings);
diff --git a/src/moapplication.cpp b/src/moapplication.cpp
index 88b5710f..fb6a7121 100644
--- a/src/moapplication.cpp
+++ b/src/moapplication.cpp
@@ -359,9 +359,6 @@ int MOApplication::doOneRun(MOMultiProcess& multiProcess)
tt.start("MOApplication::doOneRun() MainWindow setup");
MainWindow mainWindow(settings, organizer, *pluginContainer);
- // qt resets the thread name somewhere when creating the main window
- MOShared::SetThisThreadName("main");
-
// the nexus interface can show dialogs, make sure they're parented to the
// main window
ni.getAccessManager()->setTopLevelWidget(&mainWindow);
diff --git a/src/settings.cpp b/src/settings.cpp
index 6445bfbe..f5ad83a7 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -470,7 +470,34 @@ const DiagnosticsSettings& Settings::diagnostics() const
QSettings::Status Settings::sync() const
{
m_Settings.sync();
- return m_Settings.status();
+
+ const auto s = m_Settings.status();
+
+ // there's a bug in Qt at least until 5.15.0 where a utf-8 bom in the ini is
+ // handled correctly but still sets FormatError
+ //
+ // see qsettings.cpp, in QConfFileSettingsPrivate::readIniFile(), there's a
+ // specific check for utf-8, which adjusts `dataPos` so it's skipped, but
+ // the FLUSH_CURRENT_SECTION() macro uses `currentSectionStart`, and that one
+ // isn't adjusted when changing `dataPos` on the first line and so stays 0
+ //
+ // this puts the bom in `unparsedIniSections` and eventually sets FormatError
+ // somewhere
+ //
+ //
+ // the other problem is that the status is never reset, not even when calling
+ // sync(), so the FormatError that's returned here is actually from reading
+ // the ini, not writing it
+ //
+ //
+ // since it's impossible to get a FormatError on write, it's considered to
+ // be a NoError here
+
+ if (s == QSettings::FormatError) {
+ return QSettings::NoError;
+ } else {
+ return s;
+ }
}
QSettings::Status Settings::iniStatus() const