diff --git a/src/quick/items/qquicktextcontrol.cpp b/src/quick/items/qquicktextcontrol.cpp
index 7fa990ba9fac72870167d7b6d30be214ca520d11..8bc94b919c62c7198628df93bf10d3141e824a4b 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 cd5f262f37a89a68c881a6420c92402a1d35dfca..fc02815adf234e76fdf0b9fc3e3fd68857144828 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 2163838488c621ba06e92a77f3bba0b496e834f4..8231e3f42b592cbe12e279fda36f8be5fd7a1eef 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 9c34a7c8d8cd2a91e89985951b6f26933df477de..0bc48c98da557b15d195b82197f5b2715d265bdb 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()