Don't overwrite applicationName if already set.
My commit 6c973dee2c
broke the case where setApplicationName
is called before the QCoreApplication constructor.
Fixed and added autotest.
Task-number: QTBUG-45283
Change-Id: If7bdb0d82be50b50a95a04027f5f9d7143c1a7ac
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
This commit is contained in:
parent
1ac1ae05f5
commit
f1bfc4266b
@ -326,6 +326,7 @@ struct QCoreApplicationData {
|
||||
#ifndef QT_NO_LIBRARY
|
||||
app_libpaths = 0;
|
||||
#endif
|
||||
applicationNameSet = false;
|
||||
}
|
||||
~QCoreApplicationData() {
|
||||
#ifndef QT_NO_LIBRARY
|
||||
@ -370,8 +371,8 @@ struct QCoreApplicationData {
|
||||
|
||||
QString orgName, orgDomain;
|
||||
QString application; // application name, initially from argv[0], can then be modified.
|
||||
QString applicationNameCompat; // for QDesktopServices. Only set explicitly.
|
||||
QString applicationVersion;
|
||||
bool applicationNameSet; // true if setApplicationName was called
|
||||
|
||||
#ifndef QT_NO_LIBRARY
|
||||
QStringList *app_libpaths;
|
||||
@ -753,7 +754,8 @@ void QCoreApplication::init()
|
||||
QCoreApplication::self = this;
|
||||
|
||||
// Store app name (so it's still available after QCoreApplication is destroyed)
|
||||
coreappdata()->application = d_func()->appName();
|
||||
if (!coreappdata()->applicationNameSet)
|
||||
coreappdata()->application = d_func()->appName();
|
||||
|
||||
QLoggingRegistry::instance()->init();
|
||||
|
||||
@ -2350,13 +2352,13 @@ QString QCoreApplication::organizationDomain()
|
||||
*/
|
||||
void QCoreApplication::setApplicationName(const QString &application)
|
||||
{
|
||||
coreappdata()->applicationNameSet = !application.isEmpty();
|
||||
QString newAppName = application;
|
||||
if (newAppName.isEmpty() && QCoreApplication::self)
|
||||
newAppName = QCoreApplication::self->d_func()->appName();
|
||||
if (coreappdata()->application == newAppName)
|
||||
return;
|
||||
coreappdata()->application = newAppName;
|
||||
coreappdata()->applicationNameCompat = newAppName;
|
||||
#ifndef QT_NO_QOBJECT
|
||||
if (QCoreApplication::self)
|
||||
emit QCoreApplication::self->applicationNameChanged();
|
||||
@ -2374,7 +2376,7 @@ QString QCoreApplication::applicationName()
|
||||
// Exported for QDesktopServices (Qt4 behavior compatibility)
|
||||
Q_CORE_EXPORT QString qt_applicationName_noFallback()
|
||||
{
|
||||
return coreappdata()->applicationNameCompat;
|
||||
return coreappdata()->applicationNameSet ? coreappdata()->application : QString();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -112,6 +112,22 @@ void tst_QCoreApplication::qAppName()
|
||||
// The application name should still be available after destruction;
|
||||
// global statics often rely on this.
|
||||
QCOMPARE(QCoreApplication::applicationName(), QString::fromLatin1(appName));
|
||||
|
||||
// Setting the appname before creating the application should work (QTBUG-45283)
|
||||
const QString wantedAppName("my app name");
|
||||
{
|
||||
int argc = 1;
|
||||
char *argv[] = { const_cast<char*>(appName) };
|
||||
QCoreApplication::setApplicationName(wantedAppName);
|
||||
TestApplication app(argc, argv);
|
||||
QCOMPARE(::qAppName(), QString::fromLatin1(appName));
|
||||
QCOMPARE(QCoreApplication::applicationName(), wantedAppName);
|
||||
}
|
||||
QCOMPARE(QCoreApplication::applicationName(), wantedAppName);
|
||||
|
||||
// Restore to initial value
|
||||
QCoreApplication::setApplicationName(QString());
|
||||
QCOMPARE(QCoreApplication::applicationName(), QString());
|
||||
}
|
||||
|
||||
void tst_QCoreApplication::argc()
|
||||
|
Loading…
Reference in New Issue
Block a user