From 7c288f1a61173f1904960c96c703ee89ab5a847e Mon Sep 17 00:00:00 2001 From: Pekka Vuorela <pekka.ta.vuorela@nokia.com> 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 <joona.t.petrell@nokia.com> --- 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 7fa990ba9f..8bc94b919c 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 cd5f262f37..fc02815adf 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 2163838488..8231e3f42b 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 9c34a7c8d8..0bc48c98da 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<QQuickTextEdit*>("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() -- GitLab