aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/quick/items/qquicktextinput.cpp27
-rw-r--r--tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp6
2 files changed, 26 insertions, 7 deletions
diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp
index f3f9d0b5aa..37b103613d 100644
--- a/src/quick/items/qquicktextinput.cpp
+++ b/src/quick/items/qquicktextinput.cpp
@@ -1199,7 +1199,7 @@ void QQuickTextInput::setInputMask(const QString &im)
bool QQuickTextInput::hasAcceptableInput() const
{
Q_D(const QQuickTextInput);
- return d->hasAcceptableInput(d->m_text) == QQuickTextInputPrivate::AcceptableInput;
+ return d->m_acceptableInput;
}
/*!
@@ -2589,7 +2589,7 @@ void QQuickTextInputPrivate::handleFocusEvent(QFocusEvent *event)
&& !persistentSelection)
deselect();
- if (q->hasAcceptableInput() || fixup())
+ if (hasAcceptableInput(m_text) == AcceptableInput || fixup())
emit q->editingFinished();
#ifndef QT_NO_IM
@@ -3415,6 +3415,27 @@ bool QQuickTextInputPrivate::finishChange(int validateFromState, bool update, bo
}
}
#endif
+
+ if (m_maskData) {
+ if (m_text.length() != m_maxLength) {
+ m_acceptableInput = false;
+ } else {
+ for (int i = 0; i < m_maxLength; ++i) {
+ if (m_maskData[i].separator) {
+ if (m_text.at(i) != m_maskData[i].maskChar) {
+ m_acceptableInput = false;
+ break;
+ }
+ } else {
+ if (!isValidInput(m_text.at(i), m_maskData[i].maskChar)) {
+ m_acceptableInput = false;
+ break;
+ }
+ }
+ }
+ }
+ }
+
if (validateFromState >= 0 && wasValidInput && !m_validInput) {
if (m_transactions.count())
return false;
@@ -4199,7 +4220,7 @@ void QQuickTextInputPrivate::processKeyEvent(QKeyEvent* event)
Q_Q(QQuickTextInput);
if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) {
- if (q->hasAcceptableInput() || fixup()) {
+ if (hasAcceptableInput(m_text) == AcceptableInput || fixup()) {
emit q->accepted();
emit q->editingFinished();
}
diff --git a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
index fc1be16bc8..e5ef83ba32 100644
--- a/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
+++ b/tests/auto/quick/qquicktextinput/tst_qquicktextinput.cpp
@@ -6272,13 +6272,11 @@ void tst_qquicktextinput::hasAcceptableInputMask()
textInput->setText(invalid);
QVERIFY(textInput->hasAcceptableInput());
- // at the moment we don't strip the blank character if it is valid input, this makes the test between x vs X useless
- QEXPECT_FAIL( "Any optional and required", "To eat blanks or not? Known issue. Task 43172", Abort);
-
// test requiredMask
textInput->setInputMask(requiredMask);
textInput->setText(invalid);
- QVERIFY(!textInput->hasAcceptableInput());
+ // invalid text gets the input mask applied when setting, text becomes acceptable.
+ QVERIFY(textInput->hasAcceptableInput());
textInput->setText(valid);
QVERIFY(textInput->hasAcceptableInput());