diff options
-rw-r--r-- | src/widgets/widgets/qwidgetlinecontrol.cpp | 23 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgetlinecontrol_p.h | 2 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 51 |
3 files changed, 55 insertions, 21 deletions
diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index e6385ba390..7033eeea22 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -279,6 +279,23 @@ void QWidgetLineControl::clear() separate(); finishChange(priorState, /*update*/false, /*edited*/false); } +/*! + \internal + + Undoes the previous operation. +*/ + +void QWidgetLineControl::undo() +{ + // Undo works only for clearing the line when in any of password the modes + if (m_echoMode == QLineEdit::Normal) { + internalUndo(); + finishChange(-1, true); + } else { + cancelPasswordEchoTimer(); + clear(); + } +} /*! \internal @@ -1278,12 +1295,6 @@ void QWidgetLineControl::internalUndo(int until) cancelPasswordEchoTimer(); internalDeselect(); - // Undo works only for clearing the line when in any of password the modes - if (m_echoMode != QLineEdit::Normal) { - clear(); - return; - } - while (m_undoState && m_undoState > until) { Command& cmd = m_history[--m_undoState]; switch (cmd.type) { diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h index f21d88177c..49d9413fc0 100644 --- a/src/widgets/widgets/qwidgetlinecontrol_p.h +++ b/src/widgets/widgets/qwidgetlinecontrol_p.h @@ -245,7 +245,7 @@ public: void insert(const QString &); void clear(); - void undo() { internalUndo(); finishChange(-1, true); } + void undo(); void redo() { internalRedo(); finishChange(); } void selectWordAtPos(int); diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index bf4d1f2ebd..fec79326c8 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -2512,6 +2512,7 @@ void tst_QLineEdit::setValidator_QIntValidator_data() QTest::addColumn<QString>("expectedText"); QTest::addColumn<bool>("useKeys"); QTest::addColumn<bool>("is_valid"); + QTest::addColumn<uint>("echoMode"); for (int i=0; i<2; i++) { bool useKeys = false; @@ -2528,7 +2529,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("1") << QString("1") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [3,7] valid '3'").toLatin1()) << 3 @@ -2536,7 +2538,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("3") << QString("3") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [3,7] valid '7'").toLatin1()) << 3 @@ -2544,7 +2547,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("7") << QString("7") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [0,100] valid '9'").toLatin1()) << 0 @@ -2552,7 +2556,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("9") << QString("9") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [0,100] valid '12'").toLatin1()) << 0 @@ -2560,7 +2565,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("12") << QString("12") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [-100,100] valid '-12'").toLatin1()) << -100 @@ -2568,7 +2574,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("-12") << QString("-12") << bool(useKeys) - << bool(true); + << bool(true) + << uint(QLineEdit::Normal); // invalid data // characters not allowed in QIntValidator @@ -2578,7 +2585,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("a") << QString("") << bool(useKeys) - << bool(false); + << bool(false) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [0,9] inv 'A'").toLatin1()) << 0 @@ -2586,7 +2594,8 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("A") << QString("") << bool(useKeys) - << bool(false); + << bool(false) + << uint(QLineEdit::Normal); // minus sign only allowed with a range on the negative side QTest::newRow(QString(inputMode + "range [0,100] inv '-'").toLatin1()) << 0 @@ -2594,36 +2603,48 @@ void tst_QLineEdit::setValidator_QIntValidator_data() << QString("-") << QString("") << bool(useKeys) - << bool(false); + << bool(false) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [0,100] int '153'").toLatin1()) << 0 << 100 << QString("153") << QString(useKeys ? "15" : "") << bool(useKeys) - << bool(useKeys ? true : false); + << bool(useKeys ? true : false) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [-100,100] int '-153'").toLatin1()) << -100 << 100 << QString("-153") << QString(useKeys ? "-15" : "") << bool(useKeys) - << bool(useKeys ? true : false); + << bool(useKeys ? true : false) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [3,7] int '2'").toLatin1()) << 3 << 7 << QString("2") << QString("2") << bool(useKeys) - << bool(false); - + << bool(false) + << uint(QLineEdit::Normal); QTest::newRow(QString(inputMode + "range [3,7] int '8'").toLatin1()) << 3 << 7 << QString("8") << QString("") << bool(useKeys) - << bool(false); + << bool(false) + << uint(QLineEdit::Normal); + QTest::newRow(QString(inputMode + "range [0,99] inv 'a-a'").toLatin1()) + << 0 + << 99 + << QString("19a") + << QString(useKeys ? "19" : "") + << bool(useKeys) + << bool(useKeys ? true : false) + << uint(QLineEdit::Password); } } @@ -2635,9 +2656,11 @@ void tst_QLineEdit::setValidator_QIntValidator() QFETCH(QString, expectedText); QFETCH(bool, useKeys); QFETCH(bool, is_valid); + QFETCH(uint, echoMode); QIntValidator intValidator(mini, maxi, 0); QLineEdit *testWidget = ensureTestWidget(); + testWidget->setEchoMode((QLineEdit::EchoMode)echoMode); testWidget->setValidator(&intValidator); QVERIFY(testWidget->text().isEmpty()); //qDebug("1 input: '" + input + "' Exp: '" + expectedText + "'"); |