diff options
Diffstat (limited to 'src/quick/items/qquicktextedit.cpp')
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/quick/items/qquicktextedit.cpp b/src/quick/items/qquicktextedit.cpp index 2f2fc0d4c1..8237ad10e4 100644 --- a/src/quick/items/qquicktextedit.cpp +++ b/src/quick/items/qquicktextedit.cpp @@ -1436,6 +1436,11 @@ void QQuickTextEdit::setReadOnly(bool r) emit readOnlyChanged(r); if (!d->selectByKeyboardSet) emit selectByKeyboardChanged(!r); + if (r) { + setCursorVisible(false); + } else if (hasActiveFocus()) { + setCursorVisible(true); + } } bool QQuickTextEdit::isReadOnly() const @@ -1937,9 +1942,9 @@ QSGNode *QQuickTextEdit::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData * std::sort(d->textNodeMap.begin(), d->textNodeMap.end(), &comesBefore); } - if (d->cursorComponent == 0 && !isReadOnly()) { + if (d->cursorComponent == 0) { QSGRectangleNode* cursor = 0; - if (d->cursorVisible && d->control->cursorOn()) + if (!isReadOnly() && d->cursorVisible && d->control->cursorOn()) cursor = d->sceneGraphContext()->createRectangleNode(d->control->cursorRect(), d->color); rootNode->resetCursorNode(cursor); } @@ -2408,7 +2413,8 @@ void QQuickTextEditPrivate::handleFocusEvent(QFocusEvent *event) { Q_Q(QQuickTextEdit); bool focus = event->type() == QEvent::FocusIn; - q->setCursorVisible(focus); + if (!q->isReadOnly()) + q->setCursorVisible(focus); control->processEvent(event, QPointF(-xoff, -yoff)); if (focus) { q->q_updateAlignment(); |