From 2ae3d17883c0b24f7f4a5a1ea763105a2c8a7342 Mon Sep 17 00:00:00 2001
From: Lars Knoll <lars.knoll@nokia.com>
Date: Sat, 5 Jun 2010 22:12:56 +0200
Subject: correctly initialize the bidi level in the text engine

If the text options doesn't specify the layout
direction, determine it from the content.

Reviewed-by: Simon Hausmann
---
 src/gui/text/qtextengine.cpp | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index 3486264..191508c 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1404,7 +1404,20 @@ void QTextEngine::itemize() const
 #else
     bool ignore = ignoreBidi;
 #endif
-    if (!ignore && option.textDirection() == Qt::LeftToRight) {
+
+    bool rtl = false;
+    switch (option.textDirection()) {
+    case Qt::LeftToRight:
+        break;
+    case Qt::RightToLeft:
+        rtl = true;
+        break;
+    case Qt::LayoutDirectionAuto:
+        rtl = layoutData->string.isRightToLeft();
+        break;
+    }
+
+    if (!ignore && !rtl) {
         ignore = true;
         const QChar *start = layoutData->string.unicode();
         const QChar * const end = start + length;
@@ -1420,7 +1433,7 @@ void QTextEngine::itemize() const
     QVarLengthArray<QScriptAnalysis, 4096> scriptAnalysis(length);
     QScriptAnalysis *analysis = scriptAnalysis.data();
 
-    QBidiControl control(option.textDirection() == Qt::RightToLeft);
+    QBidiControl control(rtl);
 
     if (ignore) {
         memset(analysis, 0, length*sizeof(QScriptAnalysis));
-- 
cgit v0.12