diff options
author | Samuel Gaist <samuel.gaist@edeltech.ch> | 2013-10-31 09:18:30 (GMT) |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-11-02 22:33:02 (GMT) |
commit | be4e275fdb2f144b79c90b7fe612132ab3dbc0a9 (patch) | |
tree | 5cdad9725053da407c9073333eaacdd4b9977aa0 | |
parent | 8f84a6e549b90286afb2e4af378ea8b271babcd5 (diff) | |
download | Qt-be4e275fdb2f144b79c90b7fe612132ab3dbc0a9.zip Qt-be4e275fdb2f144b79c90b7fe612132ab3dbc0a9.tar.gz Qt-be4e275fdb2f144b79c90b7fe612132ab3dbc0a9.tar.bz2 |
Backport of Qt5 applicationName handling
Currently applicationName returns an empty value unless the user
explicitly sets it. Qt 5 is smarter and get the name either based on the
application arguments or a platform specific way (e.g. OS X using the
menu bar name) if the user didn't set it.
Based on f04b46f34e9446417cd5681f511332344679ef30
and 696060134d10d44175970ffd38618544ecdd9387
Change-Id: Ifc17cf4a74fed8cfabb46b3540dfbd64a5452640
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/corelib/kernel/qcoreapplication.cpp | 23 | ||||
-rw-r--r-- | src/corelib/kernel/qcoreapplication_p.h | 2 |
2 files changed, 18 insertions, 7 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 0bf26ad..8c9e3f8 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -64,6 +64,7 @@ #include <private/qfactoryloader_p.h> #include <private/qfunctions_p.h> #include <private/qlocale_p.h> +#include <private/qmutexpool_p.h> #ifdef Q_OS_SYMBIAN # include <exception> @@ -203,15 +204,18 @@ QString QCoreApplicationPrivate::macMenuBarName() #endif QString QCoreApplicationPrivate::appName() const { - static QString applName; + QMutexLocker locker(QMutexPool::globalInstanceGet(&applicationName)); + + if (applicationName.isNull()) { #ifdef Q_OS_MAC - applName = macMenuBarName(); + applicationName = macMenuBarName(); #endif - if (applName.isEmpty() && argv[0]) { - char *p = strrchr(argv[0], '/'); - applName = QString::fromLocal8Bit(p ? p + 1 : argv[0]); + if (applicationName.isEmpty() && argv[0]) { + char *p = strrchr(argv[0], '/'); + applicationName = QString::fromLocal8Bit(p ? p + 1 : argv[0]); + } } - return applName; + return applicationName; } #endif @@ -2417,7 +2421,12 @@ QString QCoreApplication::applicationName() #ifdef Q_OS_BLACKBERRY coreappdata()->loadManifest(); #endif - return coreappdata()->application; + + QString appname = coreappdata() ? coreappdata()->application : QString(); + if (appname.isEmpty() && QCoreApplication::self) + appname = QCoreApplication::self->d_func()->appName(); + + return appname; } /*! diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index 2bbc71f..beee229 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -87,6 +87,8 @@ public: bool notify_helper(QObject *, QEvent *); virtual QString appName() const; + mutable QString applicationName; + virtual void createEventDispatcher(); static void removePostedEvent(QEvent *); #ifdef Q_OS_WIN |