diff options
author | Santtu Lakkala <santtu.lakkala@nomovok.com> | 2015-04-16 16:51:45 +0300 |
---|---|---|
committer | Santtu Lakkala <santtu.lakkala@nomovok.com> | 2015-05-12 08:23:16 +0000 |
commit | 4e944555aa1b9efa30b07ebb5bc5191c2ea6c130 (patch) | |
tree | ad1e9e9e953a2923831d05867d82aa3304a9cb55 /src/quick | |
parent | 0f61aa5efe1c12337f3ab753c08e70d6eaf6c2ab (diff) |
Hide cursor when text fields becomes read only
Clear the cursor node in TextEdit if field is read only. Otherwise the
cursor stays visible indefinitely, if it were at the moment the flag
was set.
Task-number: QTBUG-44735
Change-Id: Ib39138260ad8a4d7e5ed2185b8a04c577ee1eff0
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquicktextedit.cpp | 12 | ||||
-rw-r--r-- | src/quick/items/qquicktextinput.cpp | 9 |
2 files changed, 17 insertions, 4 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(); diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp index 54da9a40d0..a4c61209f2 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp @@ -662,6 +662,12 @@ void QQuickTextInput::setReadOnly(bool ro) q_canPasteChanged(); d->emitUndoRedoChanged(); emit readOnlyChanged(ro); + if (ro) { + setCursorVisible(false); + } else if (hasActiveFocus()) { + setCursorVisible(true); + } + update(); } /*! @@ -2606,7 +2612,8 @@ void QQuickTextInputPrivate::handleFocusEvent(QFocusEvent *event) { Q_Q(QQuickTextInput); bool focus = event->gotFocus(); - q->setCursorVisible(focus); + if (!m_readOnly) + q->setCursorVisible(focus); if (focus) { q->q_updateAlignment(); #ifndef QT_NO_IM |