summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp22
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp13
2 files changed, 23 insertions, 12 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index 18a379f8b9..0bde57c8b3 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -368,7 +368,9 @@ struct QCoreApplicationData {
}
#endif
- QString orgName, orgDomain, application;
+ QString orgName, orgDomain;
+ QString application; // application name, initially from argv[0], can then be modified.
+ QString applicationNameCompat; // for QDesktopServices. Only set explicitly.
QString applicationVersion;
#ifndef QT_NO_LIBRARY
@@ -750,6 +752,9 @@ void QCoreApplication::init()
Q_ASSERT_X(!self, "QCoreApplication", "there should be only one application object");
QCoreApplication::self = this;
+ // Store app name (so it's still available after QCoreApplication is destroyed)
+ coreappdata()->application = d_func()->appName();
+
QLoggingRegistry::instance()->init();
#ifndef QT_NO_QOBJECT
@@ -2345,9 +2350,13 @@ QString QCoreApplication::organizationDomain()
*/
void QCoreApplication::setApplicationName(const QString &application)
{
- if (coreappdata()->application == application)
+ QString newAppName = application;
+ if (newAppName.isEmpty() && QCoreApplication::self)
+ newAppName = QCoreApplication::self->d_func()->appName();
+ if (coreappdata()->application == newAppName)
return;
- coreappdata()->application = application;
+ coreappdata()->application = newAppName;
+ coreappdata()->applicationNameCompat = newAppName;
#ifndef QT_NO_QOBJECT
if (QCoreApplication::self)
emit QCoreApplication::self->applicationNameChanged();
@@ -2359,16 +2368,13 @@ QString QCoreApplication::applicationName()
#ifdef Q_OS_BLACKBERRY
coreappdata()->loadManifest();
#endif
- QString appname = coreappdata() ? coreappdata()->application : QString();
- if (appname.isEmpty() && QCoreApplication::self)
- appname = QCoreApplication::self->d_func()->appName();
- return appname;
+ return coreappdata() ? coreappdata()->application : QString();
}
// Exported for QDesktopServices (Qt4 behavior compatibility)
Q_CORE_EXPORT QString qt_applicationName_noFallback()
{
- return coreappdata()->application;
+ return coreappdata()->applicationNameCompat;
}
/*!
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index 93a6daa6b9..ff4963a960 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -102,10 +102,15 @@ void tst_QCoreApplication::qAppName()
const char* appName = "tst_qcoreapplication";
#endif
- int argc = 1;
- char *argv[] = { const_cast<char*>(appName) };
- TestApplication app(argc, argv);
- QCOMPARE(::qAppName(), QString::fromLatin1(appName));
+ {
+ int argc = 1;
+ char *argv[] = { const_cast<char*>(appName) };
+ TestApplication app(argc, argv);
+ QCOMPARE(::qAppName(), QString::fromLatin1(appName));
+ QCOMPARE(QCoreApplication::applicationName(), QString::fromLatin1(appName));
+ }
+ // The application name should still be available after destruction;
+ // global statics often rely on this.
QCOMPARE(QCoreApplication::applicationName(), QString::fromLatin1(appName));
}