diff options
author | Lars Knoll <lars.knoll@nokia.com> | 2012-05-12 03:33:50 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-05-16 04:25:14 +0200 |
commit | b25b3a9f8bee10d490d3160d1fb28bf0013c8e0b (patch) | |
tree | 0dc6ece26193cbc111789f639e7f8ac78796f4be /src/corelib/kernel | |
parent | 1756a84756807a9849aa507e77845dfdf31b8020 (diff) |
Avoid using iconv for text conversion where possible
Try to use a builtin codec as codecForLocale() if possible
first. Fall back and instantiate the iconv codec only
if that failed.
In addition, make sure we initialize the locale correctly
before we try to setup the codec.
Change-Id: I86d635f9d11e8ff93093f162e79fb37f3d85731b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r-- | src/corelib/kernel/qcoreapplication.cpp | 18 | ||||
-rw-r--r-- | src/corelib/kernel/qcoreapplication_p.h | 2 |
2 files changed, 15 insertions, 5 deletions
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index c4530712a2..ad8c35bbab 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -230,7 +230,7 @@ bool QCoreApplicationPrivate::is_app_running = false; // app closing down if true bool QCoreApplicationPrivate::is_app_closing = false; // initialized in qcoreapplication and in qtextstream autotest when setlocale is called. -Q_CORE_EXPORT bool qt_locale_initialized = false; +static bool qt_locale_initialized = false; Q_CORE_EXPORT uint qGlobalPostedEventsCount() { @@ -405,6 +405,17 @@ QString qAppName() return QCoreApplication::instance()->d_func()->appName(); } +void QCoreApplicationPrivate::initLocale() +{ + if (qt_locale_initialized) + return; + qt_locale_initialized = true; +#ifdef Q_OS_UNIX + setlocale(LC_ALL, ""); +#endif +} + + /*! \class QCoreApplication \brief The QCoreApplication class provides an event loop for console Qt @@ -543,10 +554,7 @@ void QCoreApplication::init() { Q_D(QCoreApplication); -#ifdef Q_OS_UNIX - setlocale(LC_ALL, ""); // use correct char set mapping - qt_locale_initialized = true; -#endif + QCoreApplicationPrivate::initLocale(); Q_ASSERT_X(!self, "QCoreApplication", "there should be only one application object"); QCoreApplication::self = this; diff --git a/src/corelib/kernel/qcoreapplication_p.h b/src/corelib/kernel/qcoreapplication_p.h index 112b313129..15aca398b7 100644 --- a/src/corelib/kernel/qcoreapplication_p.h +++ b/src/corelib/kernel/qcoreapplication_p.h @@ -89,6 +89,8 @@ public: static QString macMenuBarName(); #endif + static void initLocale(); + QAtomicInt quitLockRef; void ref(); void deref(); |