From 0e6f1cb7fa634195cb238c4893e6fa0b99fb0abb Mon Sep 17 00:00:00 2001 From: Benjamin Terrier Date: Sat, 14 May 2016 11:43:04 +0200 Subject: Add applicationDisplayNameChanged() signal. If applicationDisplayName has not been set, the signal is emitted when applicationNameChanged() is emitted. [ChangeLog][QtGui][General] Add QGuiApplication::applicationDisplayNameChanged() signal. Task-number: QTBUG-53076 Change-Id: I18494ad90bd8dec3f79ef5175a3a85e776560fd0 Reviewed-by: David Faure --- src/gui/kernel/qguiapplication.cpp | 24 +++++++++++++++++----- src/gui/kernel/qguiapplication.h | 3 ++- .../kernel/qguiapplication/tst_qguiapplication.cpp | 18 ++++++++++++++++ 3 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index a125b39d67..d0bfc7ff5f 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -656,9 +656,20 @@ QGuiApplicationPrivate::QGuiApplicationPrivate(int &argc, char **argv, int flags */ void QGuiApplication::setApplicationDisplayName(const QString &name) { - if (!QGuiApplicationPrivate::displayName) - QGuiApplicationPrivate::displayName = new QString; - *QGuiApplicationPrivate::displayName = name; + if (!QGuiApplicationPrivate::displayName) { + QGuiApplicationPrivate::displayName = new QString(name); + if (qGuiApp) { + disconnect(qGuiApp, &QGuiApplication::applicationNameChanged, + qGuiApp, &QGuiApplication::applicationDisplayNameChanged); + + if (QGuiApplicationPrivate::displayName != applicationName()) + emit qGuiApp->applicationDisplayNameChanged(); + } + } else if (name != *QGuiApplicationPrivate::displayName) { + *QGuiApplicationPrivate::displayName = name; + if (qGuiApp) + emit qGuiApp->applicationDisplayNameChanged(); + } } QString QGuiApplication::applicationDisplayName() @@ -1424,9 +1435,8 @@ void QGuiApplicationPrivate::init() init_plugins(pluginList); QWindowSystemInterface::flushWindowSystemEvents(); -#ifndef QT_NO_SESSIONMANAGER Q_Q(QGuiApplication); - +#ifndef QT_NO_SESSIONMANAGER // connect to the session manager session_manager = new QSessionManager(q, session_id, session_key); #endif @@ -1455,6 +1465,10 @@ void QGuiApplicationPrivate::init() if (layout_direction == Qt::LayoutDirectionAuto || force_reverse) QGuiApplication::setLayoutDirection(qt_detectRTLLanguage() ? Qt::RightToLeft : Qt::LeftToRight); + + if (!QGuiApplicationPrivate::displayName) + QObject::connect(q, &QGuiApplication::applicationNameChanged, + q, &QGuiApplication::applicationDisplayNameChanged); } extern void qt_cleanupFontDatabase(); diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h index 10057c5b7f..725d7cb59d 100644 --- a/src/gui/kernel/qguiapplication.h +++ b/src/gui/kernel/qguiapplication.h @@ -72,7 +72,7 @@ class Q_GUI_EXPORT QGuiApplication : public QCoreApplication { Q_OBJECT Q_PROPERTY(QIcon windowIcon READ windowIcon WRITE setWindowIcon) - Q_PROPERTY(QString applicationDisplayName READ applicationDisplayName WRITE setApplicationDisplayName) + Q_PROPERTY(QString applicationDisplayName READ applicationDisplayName WRITE setApplicationDisplayName NOTIFY applicationDisplayNameChanged) Q_PROPERTY(QString desktopFileName READ desktopFileName WRITE setDesktopFileName) Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection NOTIFY layoutDirectionChanged) Q_PROPERTY(QString platformName READ platformName STORED false) @@ -183,6 +183,7 @@ Q_SIGNALS: void saveStateRequest(QSessionManager &sessionManager); #endif void paletteChanged(const QPalette &pal); + void applicationDisplayNameChanged(); protected: bool event(QEvent *) Q_DECL_OVERRIDE; diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 32d0aa504c..f8bcb14ab3 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -106,11 +106,29 @@ void tst_QGuiApplication::displayName() int argc = 1; char *argv[] = { const_cast("tst_qguiapplication") }; QGuiApplication app(argc, argv); + QSignalSpy spy(&app, &QGuiApplication::applicationDisplayNameChanged); + QCOMPARE(::qAppName(), QString::fromLatin1("tst_qguiapplication")); QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("tst_qguiapplication")); QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("tst_qguiapplication")); + + QGuiApplication::setApplicationName("The Core Application"); + QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("The Core Application")); + QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The Core Application")); + QCOMPARE(spy.count(), 1); + QGuiApplication::setApplicationDisplayName("The GUI Application"); QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application")); + QCOMPARE(spy.count(), 2); + + QGuiApplication::setApplicationName("The Core Application 2"); + QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("The Core Application 2")); + QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application")); + QCOMPARE(spy.count(), 2); + + QGuiApplication::setApplicationDisplayName("The GUI Application 2"); + QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application 2")); + QCOMPARE(spy.count(), 3); } void tst_QGuiApplication::desktopFileName() -- cgit v1.2.3