diff options
-rw-r--r-- | src/widgets/widgets/qlineedit.cpp | 5 | ||||
-rw-r--r-- | src/widgets/widgets/qwidgetlinecontrol.cpp | 4 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp | 12 |
3 files changed, 19 insertions, 2 deletions
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 43aa10bdb6..bb1bf64ba0 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1681,6 +1681,11 @@ void QLineEdit::mouseDoubleClickEvent(QMouseEvent* e) results in a validator's validate() call to return Invalid. Another case is when trying to enter in more characters beyond the maximum length of the line edit. + + Note: This signal will still be emitted in a case where part of + the text is accepted but not all of it is. For example, if there + is a maximum length set and the clipboard text is longer than the + maximum length when it is pasted. */ /*! diff --git a/src/widgets/widgets/qwidgetlinecontrol.cpp b/src/widgets/widgets/qwidgetlinecontrol.cpp index 670735df3b..b5af8e36aa 100644 --- a/src/widgets/widgets/qwidgetlinecontrol.cpp +++ b/src/widgets/widgets/qwidgetlinecontrol.cpp @@ -872,9 +872,9 @@ void QWidgetLineControl::internalInsert(const QString &s) for (int i = 0; i < (int) s.left(remaining).length(); ++i) addCommand(Command(Insert, m_cursor++, s.at(i), -1, -1)); m_textDirty = true; - } else { - emit inputRejected(); } + if (s.length() > remaining) + emit inputRejected(); } } diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 6e472bff02..01f2b3df5f 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -4838,6 +4838,13 @@ void tst_QLineEdit::inputRejected() QCOMPARE(spyInputRejected.count(), 0); QTest::keyClicks(testWidget, "fgh"); QCOMPARE(spyInputRejected.count(), 3); + testWidget->clear(); + spyInputRejected.clear(); + QApplication::clipboard()->setText("ijklmno"); + testWidget->paste(); + // The first 5 characters are accepted, but + // the last 2 are not. + QCOMPARE(spyInputRejected.count(), 1); testWidget->setMaxLength(INT_MAX); testWidget->clear(); @@ -4848,6 +4855,11 @@ void tst_QLineEdit::inputRejected() QCOMPARE(spyInputRejected.count(), 0); QTest::keyClicks(testWidget, "a#"); QCOMPARE(spyInputRejected.count(), 2); + testWidget->clear(); + spyInputRejected.clear(); + QApplication::clipboard()->setText("a#"); + testWidget->paste(); + QCOMPARE(spyInputRejected.count(), 1); testWidget->clear(); testWidget->setValidator(0); |