From 7c288f1a61173f1904960c96c703ee89ab5a847e Mon Sep 17 00:00:00 2001 From: Pekka Vuorela Date: Fri, 20 Apr 2012 17:18:53 +0300 Subject: [PATCH] Fix TextEdit with right aligned text when size changes Geometry change was avoiding updating size of the QTextDocument, thus it was not able to right align before something else triggered size change, e.g. a modification to the text. Also removed unnecessary cursorRectangleChanged signal that was emitted when moving focus with mouse. Change-Id: I293fd5119473eb3def5acd1b3fbb951c12e14412 Reviewed-by: Joona Petrell --- src/quick/items/qquicktextcontrol.cpp | 14 +++++--------- src/quick/items/qquicktextedit.cpp | 2 +- .../data/horizontalAlignment_RightToLeft.qml | 16 ++++++++++++++++ .../quick/qquicktextedit/tst_qquicktextedit.cpp | 8 ++++++++ 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp index 7fa990b..8bc94b9 100644 --- a/src/quick/items/qquicktextcontrol.cpp +++ b/src/quick/items/qquicktextcontrol.cpp @@ -1206,18 +1206,14 @@ void QQuickTextControlPrivate::mousePressEvent(QMouseEvent *e, const QPointF &po } } - if (interactionFlags & Qt::TextEditable) { + if (cursor.position() != oldCursorPos) { q->updateCursorRectangle(true); - if (cursor.position() != oldCursorPos) - emit q->cursorPositionChanged(); + emit q->cursorPositionChanged(); + } + if (interactionFlags & Qt::TextEditable) _q_updateCurrentCharFormatAndSelection(); - } else { - if (cursor.position() != oldCursorPos) { - emit q->cursorPositionChanged(); - q->updateCursorRectangle(true); - } + else selectionChanged(); - } repaintOldAndNewSelection(oldSelection); hadSelectionOnMousePress = cursor.hasSelection(); } diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index cd5f262..fc02815 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1144,7 +1144,7 @@ void QQuickTextEdit::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_D(QQuickTextEdit); - if (newGeometry.width() != oldGeometry.width() && d->wrapMode != NoWrap && widthValid() && !d->inLayout) { + if (newGeometry.width() != oldGeometry.width() && widthValid() && !d->inLayout) { updateSize(); moveCursorDelegate(); } diff --git a/tests/auto/quick/qquicktextedit/data/horizontalAlignment_RightToLeft.qml b/tests/auto/quick/qquicktextedit/data/horizontalAlignment_RightToLeft.qml index 2163838..8231e3f 100644 --- a/tests/auto/quick/qquicktextedit/data/horizontalAlignment_RightToLeft.qml +++ b/tests/auto/quick/qquicktextedit/data/horizontalAlignment_RightToLeft.qml @@ -8,6 +8,7 @@ Rectangle { property string text: "اختبا" Rectangle { + id: arabicContainer anchors.centerIn: parent width: 200 height: 20 @@ -22,4 +23,19 @@ Rectangle { textFormat: TextEdit.AutoText } } + + Rectangle { + anchors.top: arabicContainer.bottom + anchors.left: arabicContainer.left + width: 200 + height: 20 + color: "green" + + TextEdit { + id: emptyTextEdit + objectName: "emptyTextEdit" + anchors.fill: parent + textFormat: TextEdit.AutoText + } + } } diff --git a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp index 9c34a7c..0bc48c9 100644 --- a/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp +++ b/tests/auto/quick/qquicktextedit/tst_qquicktextedit.cpp @@ -772,6 +772,14 @@ void tst_qquicktextedit::hAlign_RightToLeft() textEdit->setHAlign(QQuickTextEdit::AlignRight); QCOMPARE(textEdit->hAlign(), QQuickTextEdit::AlignRight); QVERIFY(textEdit->positionToRectangle(0).x() > canvas.width()/2); + + // make sure editor doesn't rely on input for updating size + QQuickTextEdit *emptyEdit = canvas.rootObject()->findChild("emptyTextEdit"); + QVERIFY(emptyEdit != 0); + platformInputContext.setInputDirection(Qt::RightToLeft); + emptyEdit->setFocus(true); + QCOMPARE(emptyEdit->hAlign(), QQuickTextEdit::AlignRight); + QVERIFY(emptyEdit->cursorRectangle().left() > canvas.width()/2); } void tst_qquicktextedit::vAlign() -- 1.7.2.5