From 25a3f25ce98c0a88582e97cfcdede970e7cc4a6d Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Tue, 27 Sep 2016 14:47:06 +0200 Subject: SpinBox: don't call valueFromText when non-editable If there are custom values like 00:00:00 for time and valueFromText is not implemented, tab navigation sets the value to 0, because the default implementation cannot evaluate it. Change-Id: I0384a2015b2c2a4dc2ee0e57f1ece410c339838e Task-number: QTBUG-56215 Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickspinbox.cpp | 4 ++-- tests/auto/controls/data/tst_spinbox.qml | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/quicktemplates2/qquickspinbox.cpp b/src/quicktemplates2/qquickspinbox.cpp index b7595b71..116d1e12 100644 --- a/src/quicktemplates2/qquickspinbox.cpp +++ b/src/quicktemplates2/qquickspinbox.cpp @@ -612,7 +612,7 @@ void QQuickSpinBox::keyReleaseEvent(QKeyEvent *event) Q_D(QQuickSpinBox); QQuickControl::keyReleaseEvent(event); - if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) + if (d->editable && (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)) d->updateValue(); d->up->setPressed(false); @@ -704,7 +704,7 @@ void QQuickSpinBox::itemChange(ItemChange change, const ItemChangeData &value) { Q_D(QQuickSpinBox); QQuickControl::itemChange(change, value); - if (change == ItemActiveFocusHasChanged && !value.boolValue) + if (d->editable && change == ItemActiveFocusHasChanged && !value.boolValue) d->updateValue(); } diff --git a/tests/auto/controls/data/tst_spinbox.qml b/tests/auto/controls/data/tst_spinbox.qml index d8422706..b370a05f 100644 --- a/tests/auto/controls/data/tst_spinbox.qml +++ b/tests/auto/controls/data/tst_spinbox.qml @@ -478,4 +478,36 @@ TestCase { control.destroy() } + + function test_valueFromText_data() { + return [ + { tag: "editable", editable: true }, + { tag: "non-editable", editable: false } + ] + } + + function test_valueFromText(data) { + var control = spinBox.createObject(testCase, {editable: data.editable}) + verify(control) + + control.forceActiveFocus() + verify(control.activeFocus) + + var valueFromTextCalls = 0 + control.valueFromText = function(text, locale) { + ++valueFromTextCalls + return Number.fromLocaleString(locale, text); + } + + keyClick(Qt.Key_Enter) + compare(valueFromTextCalls, data.editable ? 1 : 0) + + keyClick(Qt.Key_Return) + compare(valueFromTextCalls, data.editable ? 2 : 0) + + control.focus = false + compare(valueFromTextCalls, data.editable ? 3 : 0) + + control.destroy() + } } -- cgit v1.2.3