aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanttu Lakkala <santtu.lakkala@nomovok.com>2015-04-16 16:51:45 +0300
committerSanttu Lakkala <santtu.lakkala@nomovok.com>2015-05-12 08:23:16 +0000
commit4e944555aa1b9efa30b07ebb5bc5191c2ea6c130 (patch)
treead1e9e9e953a2923831d05867d82aa3304a9cb55
parent0f61aa5efe1c12337f3ab753c08e70d6eaf6c2ab (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>
-rw-r--r--src/quick/items/qquicktextedit.cpp12
-rw-r--r--src/quick/items/qquicktextinput.cpp9
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp2
3 files changed, 19 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
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index b8eee9ce21..88cac92864 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -3192,6 +3192,7 @@ void tst_qquicktextinput::readOnly()
QVERIFY(input != 0);
QTRY_VERIFY(input->hasActiveFocus() == true);
QVERIFY(input->isReadOnly() == true);
+ QVERIFY(input->isCursorVisible() == false);
QString initial = input->text();
for (int k=Qt::Key_0; k<=Qt::Key_Z; k++)
simulateKey(&window, k);
@@ -3204,6 +3205,7 @@ void tst_qquicktextinput::readOnly()
input->setReadOnly(false);
QCOMPARE(input->isReadOnly(), false);
QCOMPARE(input->cursorPosition(), input->text().length());
+ QVERIFY(input->isCursorVisible() == true);
}
void tst_qquicktextinput::echoMode()