summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qstring.cpp
diff options
context:
space:
mode:
authorKonstantin Ritt <ritt.ks@gmail.com>2012-05-10 12:07:58 +0300
committerQt by Nokia <qt-info@nokia.com>2012-05-11 01:42:02 +0200
commit3f9b5086525ac4552fd4d7cc89c74bf76f45b1dc (patch)
tree805dc314effa82dfc2d7fceada7aa678b108d580 /src/corelib/tools/qstring.cpp
parentc2f8fe64f1273ed25a8e5834f86dc19b79805855 (diff)
fix QString::isRightToLeft() for SMP code points
Change-Id: Ib8afc932d9566df1a8922da9a75b9f9cbbdd321d Reviewed-by: Lars Knoll <lars.knoll@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/tools/qstring.cpp')
-rw-r--r--src/corelib/tools/qstring.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index ebf157a600..a0963b6db2 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -7304,7 +7304,15 @@ bool QString::isRightToLeft() const
const ushort *p = d->data();
const ushort * const end = p + d->size;
while (p < end) {
- switch(QChar::direction(*p))
+ uint ucs4 = *p;
+ if (QChar::isHighSurrogate(ucs4) && p < end - 1) {
+ ushort low = p[1];
+ if (QChar::isLowSurrogate(low)) {
+ ucs4 = QChar::surrogateToUcs4(ucs4, low);
+ ++p;
+ }
+ }
+ switch (QChar::direction(ucs4))
{
case QChar::DirL:
return false;