diff options
-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 |