summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@nokia.com>2012-05-12 03:33:50 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-16 04:25:14 +0200
commitb25b3a9f8bee10d490d3160d1fb28bf0013c8e0b (patch)
tree0dc6ece26193cbc111789f639e7f8ac78796f4be /src/corelib/kernel
parent1756a84756807a9849aa507e77845dfdf31b8020 (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.cpp18
-rw-r--r--src/corelib/kernel/qcoreapplication_p.h2
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();