aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/kconfig.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/core/kconfig.cpp b/src/core/kconfig.cpp
index 1da816fa..3819716b 100644
--- a/src/core/kconfig.cpp
+++ b/src/core/kconfig.cpp
@@ -530,23 +530,35 @@ KConfig::OpenFlags KConfig::openFlags() const
return d->openFlags;
}
-Q_GLOBAL_STATIC(QString, globalMainConfigName)
+struct KConfigStaticData
+{
+ QString globalMainConfigName;
+ // Keep a copy so we can use it in global dtors, after qApp is gone
+ // This is a workaround for the Qt bug fixed in https://codereview.qt-project.org/107005 for Qt 5.5
+ // Revert this addition once we can depend on Qt 5.5.
+ QStringList appArgs;
+};
+Q_GLOBAL_STATIC(KConfigStaticData, globalData)
void KConfig::setMainConfigName(const QString &str)
{
- *globalMainConfigName() = str;
+ globalData()->globalMainConfigName = str;
}
QString KConfig::mainConfigName()
{
+ KConfigStaticData* data = globalData();
+ if (data->appArgs.isEmpty())
+ data->appArgs = QCoreApplication::arguments();
+
// --config on the command line overrides everything else
- const QStringList args = QCoreApplication::arguments();
+ const QStringList args = data->appArgs;
for (int i = 1; i < args.count(); ++i) {
if (args.at(i) == QLatin1String("--config") && i < args.count() - 1) {
return args.at(i + 1);
}
}
- const QString globalName = *globalMainConfigName();
+ const QString globalName = data->globalMainConfigName;
if (!globalName.isEmpty()) {
return globalName;
}