diff options
author | Hannu Koivisto <hannu.koivisto@vincit.fi> | 2010-09-21 15:59:27 +0300 |
---|---|---|
committer | Pekka Vuorela <pekka.ta.vuorela@nokia.com> | 2010-11-08 15:52:36 +0200 |
commit | 2938651b20a87ac3c1d68f88396f4418b847d120 (patch) | |
tree | bca9358c43b237497284a12c9826878f16022a6d | |
parent | a12bdd281671429fb6c90cfa28012b3242465a3b (diff) |
Changes: MTextEdit: recognize \r as return in input method event
RevBy: Pekka Vuorela
Details: since one can use input method events to send arbitrary strings,
it's (hopefully) better to recognize only \r as return that causes
returnPressed to be emitted. Since this change conflicts with VKB that
currently sends \n from return, we still recognize \n as well and remove that
when the VKB has been changed.
-rwxr-xr-x | src/corelib/widgets/mtextedit.cpp | 6 | ||||
-rw-r--r-- | tests/ut_mtextedit/ut_mtextedit.cpp | 41 |
2 files changed, 38 insertions, 9 deletions
diff --git a/src/corelib/widgets/mtextedit.cpp b/src/corelib/widgets/mtextedit.cpp index f20a373e..d9514343 100755 --- a/src/corelib/widgets/mtextedit.cpp +++ b/src/corelib/widgets/mtextedit.cpp @@ -2149,12 +2149,16 @@ void MTextEdit::inputMethodEvent(QInputMethodEvent *event) bool emitReturnPressed = false; if (lineMode() == MTextEditModel::SingleLine) { - emitReturnPressed = commitString.contains('\n'); + // FIXME: remove \n-check once VKB has been changed to send \r as return + emitReturnPressed = commitString.contains('\n') || commitString.contains('\r'); + preedit.remove('\n'); commitString.remove('\n'); preedit = d->replaceLineBreaks(preedit, QChar(' ')); commitString = d->replaceLineBreaks(commitString, QChar(' ')); + } else if (lineMode() == MTextEditModel::MultiLine) { + commitString.replace("\r", "\n"); } // get and remove the current selection diff --git a/tests/ut_mtextedit/ut_mtextedit.cpp b/tests/ut_mtextedit/ut_mtextedit.cpp index 6c38dff9..c9b3f303 100644 --- a/tests/ut_mtextedit/ut_mtextedit.cpp +++ b/tests/ut_mtextedit/ut_mtextedit.cpp @@ -1866,13 +1866,21 @@ void Ut_MTextEdit::testReturnKeyPressed_data() QTest::addColumn<MTextEditModel::LineMode>("lineMode"); QTest::addColumn<QValidator::State>("validatorState"); QTest::addColumn<int>("expectedSignals"); + QTest::addColumn<QString>("returnString"); - QTest::newRow("single line, invalid") << MTextEditModel::SingleLine << QValidator::Invalid << 0; - QTest::newRow("single line, intermediate") << MTextEditModel::SingleLine << QValidator::Intermediate << 0; - QTest::newRow("single line, acceptable") << MTextEditModel::SingleLine << QValidator::Acceptable << 1; - QTest::newRow("multi line, invalid") << MTextEditModel::MultiLine << QValidator::Invalid << 0; - QTest::newRow("multi line, intermediate") << MTextEditModel::MultiLine << QValidator::Intermediate << 0; - QTest::newRow("multi line, acceptable") << MTextEditModel::MultiLine << QValidator::Acceptable << 0; + QTest::newRow("single line, invalid, \\n") << MTextEditModel::SingleLine << QValidator::Invalid << 0 << "\n"; + QTest::newRow("single line, intermediate, \\n") << MTextEditModel::SingleLine << QValidator::Intermediate << 0 << "\n"; + QTest::newRow("single line, acceptable, \\n") << MTextEditModel::SingleLine << QValidator::Acceptable << 1 << "\n"; + QTest::newRow("multi line, invalid, \\n") << MTextEditModel::MultiLine << QValidator::Invalid << 0 << "\n"; + QTest::newRow("multi line, intermediate, \\n") << MTextEditModel::MultiLine << QValidator::Intermediate << 0 << "\n"; + QTest::newRow("multi line, acceptable, \\n") << MTextEditModel::MultiLine << QValidator::Acceptable << 0 << "\n"; + + QTest::newRow("single line, invalid, \\r") << MTextEditModel::SingleLine << QValidator::Invalid << 0 << "\r"; + QTest::newRow("single line, intermediate, \\r") << MTextEditModel::SingleLine << QValidator::Intermediate << 0 << "\r"; + QTest::newRow("single line, acceptable, \\r") << MTextEditModel::SingleLine << QValidator::Acceptable << 1 << "\r"; + QTest::newRow("multi line, invalid, \\r") << MTextEditModel::MultiLine << QValidator::Invalid << 0 << "\r"; + QTest::newRow("multi line, intermediate, \\r") << MTextEditModel::MultiLine << QValidator::Intermediate << 0 << "\r"; + QTest::newRow("multi line, acceptable, \\r") << MTextEditModel::MultiLine << QValidator::Acceptable << 0 << "\r"; } /*! @@ -1886,11 +1894,12 @@ void Ut_MTextEdit::testReturnKeyPressed() QFETCH(MTextEditModel::LineMode, lineMode); QFETCH(QValidator::State, validatorState); QFETCH(int, expectedSignals); + QFETCH(QString, returnString); MTextEdit subject(lineMode); SimpleValidator validator; - QKeyEvent event(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, "\n"); + QKeyEvent event(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier, returnString); QSignalSpy returnPressedSpy(&subject, SIGNAL(returnPressed())); validator.state = validatorState; @@ -1912,18 +1921,26 @@ void Ut_MTextEdit::testLineBreakSent_data() QTest::newRow("single line, preedit, no line break") << MTextEditModel::SingleLine << "preedit" << "" << M::FreeTextContentType << 0; QTest::newRow("single line, commit, no line break") << MTextEditModel::SingleLine << "" << "commit" << M::FreeTextContentType << 0; QTest::newRow("single line, preedit, line break") << MTextEditModel::SingleLine << "preedit\n" << "" << M::FreeTextContentType << 0; + QTest::newRow("single line, preedit, line break \\r") << MTextEditModel::SingleLine << "preedit\r" << "" << M::FreeTextContentType << 0; QTest::newRow("single line, commit, line break") << MTextEditModel::SingleLine << "" << "commit\n" << M::FreeTextContentType << 1; + QTest::newRow("single line, commit, line break \\r") << MTextEditModel::SingleLine << "" << "commit\r" << M::FreeTextContentType << 1; QTest::newRow("single line, commit, line break only") << MTextEditModel::SingleLine << "" << "\n" << M::FreeTextContentType << 1; + QTest::newRow("single line, commit, line break \\r only") << MTextEditModel::SingleLine << "" << "\r" << M::FreeTextContentType << 1; QTest::newRow("single line, commit, multiple line breaks") << MTextEditModel::SingleLine << "" << "commit\n\n\n" << M::FreeTextContentType << 1; + QTest::newRow("single line, commit, multiple \\r line breaks") << MTextEditModel::SingleLine << "" << "commit\r\r\r" << M::FreeTextContentType << 1; QTest::newRow("single line, invalid number") << MTextEditModel::SingleLine << "" << "abc\n" << M::NumberContentType << 0; - QTest::newRow("single line, valid number") << MTextEditModel::SingleLine << "" << "123\n" << M::NumberContentType << 1; + QTest::newRow("single line, valid number, line break") << MTextEditModel::SingleLine << "" << "123\n" << M::NumberContentType << 1; + QTest::newRow("single line, valid number, line break \\r") << MTextEditModel::SingleLine << "" << "123\r" << M::NumberContentType << 1; QTest::newRow("multi line, empty") << MTextEditModel::MultiLine << "" << "" << M::FreeTextContentType << 0; QTest::newRow("multi line, preedit, no line break") << MTextEditModel::MultiLine << "preedit" << "" << M::FreeTextContentType << 0; QTest::newRow("multi line, commit, no line break") << MTextEditModel::MultiLine << "" << "commit" << M::FreeTextContentType << 0; QTest::newRow("multi line, preedit, line break") << MTextEditModel::MultiLine << "preedit\n" << "" << M::FreeTextContentType << 0; + QTest::newRow("multi line, preedit, line break \\r") << MTextEditModel::MultiLine << "preedit\r" << "" << M::FreeTextContentType << 0; QTest::newRow("multi line, commit, line break only") << MTextEditModel::MultiLine << "" << "\n" << M::FreeTextContentType << 0; + QTest::newRow("multi line, commit, line break \\r only") << MTextEditModel::MultiLine << "" << "\r" << M::FreeTextContentType << 0; QTest::newRow("multi line, commit, line break") << MTextEditModel::MultiLine << "" << "commit\n" << M::FreeTextContentType << 0; + QTest::newRow("multi line, commit, line break \\r") << MTextEditModel::MultiLine << "" << "commit\r" << M::FreeTextContentType << 0; QTest::newRow("multi line, commit, multiple line breaks") << MTextEditModel::MultiLine << "" << "commit\n\n\n" << M::FreeTextContentType << 0; } @@ -1964,9 +1981,17 @@ void Ut_MTextEdit::testCommitLineBreakAfterPreedit_data() QTest::newRow("123\\n, intermediate") << QValidator::Intermediate << "123\n" << 0; QTest::newRow("123\\n, acceptable") << QValidator::Acceptable << "123\n" << 1; + QTest::newRow("123\\r, invalid") << QValidator::Invalid << "123\r" << 0; + QTest::newRow("123\\r, intermediate") << QValidator::Intermediate << "123\r" << 0; + QTest::newRow("123\\r, acceptable") << QValidator::Acceptable << "123\r" << 1; + QTest::newRow("\\n, invalid") << QValidator::Invalid << "\n" << 0; QTest::newRow("\\n, intermediate") << QValidator::Intermediate << "\n" << 0; QTest::newRow("\\n, acceptable") << QValidator::Acceptable << "\n" << 1; + + QTest::newRow("\\r, invalid") << QValidator::Invalid << "\r" << 0; + QTest::newRow("\\r, intermediate") << QValidator::Intermediate << "\r" << 0; + QTest::newRow("\\r, acceptable") << QValidator::Acceptable << "\r" << 1; } /*! |