From 52fe778df2310660c84db581c53e2c3fae2cc42a Mon Sep 17 00:00:00 2001
From: Olivier Goffart <olivier.goffart@nokia.com>
Date: Mon, 9 Aug 2010 14:11:46 +0200
Subject: Fix QString::arg: When specifying %L1, the group separator would be
 added even if the local specify QLocale::OmitGroupSeparator

Task-number: QTBUG-9281
Reviewed-by: Denis
(cherry picked from commit 720f4ca0ec3b42a101ac24b2cf74cdc87d29eac9)
---
 src/corelib/tools/qstring.cpp      | 13 ++++++++-----
 tests/auto/qstring/tst_qstring.cpp | 12 ++++++++++++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 3f472d3..807fdd3 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -6510,8 +6510,9 @@ QString QString::arg(qlonglong a, int fieldWidth, int base, const QChar &fillCha
     QString locale_arg;
     if (d.locale_occurrences > 0) {
         QLocale locale;
-        locale_arg = locale.d()->longLongToString(a, -1, base, fieldWidth,
-                                                  flags | QLocalePrivate::ThousandsGroup);
+        if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
+            flags |= QLocalePrivate::ThousandsGroup;
+        locale_arg = locale.d()->longLongToString(a, -1, base, fieldWidth, flags);
     }
 
     return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
@@ -6553,8 +6554,9 @@ QString QString::arg(qulonglong a, int fieldWidth, int base, const QChar &fillCh
     QString locale_arg;
     if (d.locale_occurrences > 0) {
         QLocale locale;
-        locale_arg = locale.d()->unsLongLongToString(a, -1, base, fieldWidth,
-                                                     flags | QLocalePrivate::ThousandsGroup);
+        if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
+            flags |= QLocalePrivate::ThousandsGroup;
+        locale_arg = locale.d()->unsLongLongToString(a, -1, base, fieldWidth, flags);
     }
 
     return replaceArgEscapes(*this, d, fieldWidth, arg, locale_arg, fillChar);
@@ -6687,7 +6689,8 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, const QChar &
     if (d.locale_occurrences > 0) {
         QLocale locale;
 
-        flags |= QLocalePrivate::ThousandsGroup;
+        if (!locale.numberOptions() & QLocale::OmitGroupSeparator)
+            flags |= QLocalePrivate::ThousandsGroup;
         locale_arg = locale.d()->doubleToString(a, prec, form, fieldWidth, flags);
     }
 
diff --git a/tests/auto/qstring/tst_qstring.cpp b/tests/auto/qstring/tst_qstring.cpp
index 5a153de..d26f5e6 100644
--- a/tests/auto/qstring/tst_qstring.cpp
+++ b/tests/auto/qstring/tst_qstring.cpp
@@ -203,6 +203,7 @@ private slots:
     void repeated_data() const;
     void task262677remove();
     void QTBUG10404_compareRef();
+    void QTBUG9281_arg_locale();
 };
 
 typedef QList<int> IntList;
@@ -4712,6 +4713,17 @@ void tst_QString::QTBUG10404_compareRef()
     QVERIFY(QStringRef(&a2, 1, 2).compare(QStringRef(&a, 1, 3), Qt::CaseInsensitive) < 0);
 }
 
+void tst_QString::QTBUG9281_arg_locale()
+{
+    QLocale l(QLocale::English, QLocale::UnitedKingdom);
+    l.setNumberOptions(QLocale::OmitGroupSeparator);
+    QLocale::setDefault(l);
+    QString str("*%L1*%L2*");
+    str = str.arg(123456).arg(1234.56);
+    QCOMPARE(str, QString::fromLatin1("*123456*1234.56*"));
+    QLocale::setDefault(QLocale::C);
+}
+
 
 
 QTEST_APPLESS_MAIN(tst_QString)
-- 
cgit v0.12