diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 6676bb27475..839e2587a78 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -658,10 +658,7 @@ void QPlainTextEditPrivate::setTopBlock(int blockNumber, int lineNumber, int dx) lineNumber = maxTopLine - block.firstLineNumber(); } - { - const QSignalBlocker blocker(vbar); - vbar->setValue(newTopLine); - } + vbar->setValue(newTopLine); if (!dx && blockNumber == control->topBlock && lineNumber == topLine) return; @@ -677,10 +674,7 @@ void QPlainTextEditPrivate::setTopBlock(int blockNumber, int lineNumber, int dx) control->topBlock = blockNumber; topLine = lineNumber; - { - const QSignalBlocker blocker(vbar); - vbar->setValue(block.firstLineNumber() + lineNumber); - } + vbar->setValue(block.firstLineNumber() + lineNumber); if (dx || dy) { viewport->scroll(q->isRightToLeft() ? -dx : dx, dy); @@ -1038,10 +1032,7 @@ void QPlainTextEditPrivate::_q_adjustScrollbars() if (firstVisibleBlock.isValid()) visualTopLine = firstVisibleBlock.firstLineNumber() + topLine; - { - const QSignalBlocker blocker(vbar); - vbar->setValue(visualTopLine); - } + vbar->setValue(visualTopLine); hbar->setRange(0, (int)documentSize.width() - viewport->width()); hbar->setPageStep(viewport->width()); diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index ec695b4bc18..7b04782cf67 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -157,6 +157,7 @@ private slots: void appendTextWhenInvisible(); void placeholderVisibility_data(); void placeholderVisibility(); + void scrollBarSignals(); private: void createSelection(); @@ -1944,5 +1945,30 @@ void tst_QPlainTextEdit::placeholderVisibility() QTRY_VERIFY(plainTextEdit_d->placeholderVisible == placeholderVisible); } + +void tst_QPlainTextEdit::scrollBarSignals() +{ + QPlainTextEdit plainTextEdit; + QString longText; + for (uint i = 0; i < 500; ++i) + longText += "This is going to be a very long text for scroll signal testing.\n"; + plainTextEdit.setPlainText(longText); + QScrollBar *vbar = plainTextEdit.verticalScrollBar(); + plainTextEdit.show(); + QVERIFY(QTest::qWaitForWindowExposed(&plainTextEdit)); + QSignalSpy spy(vbar, &QScrollBar::valueChanged); + + QTest::keyClick(vbar, Qt::Key_Down); + QTRY_COMPARE(spy.count(), 1); + QTest::keyClick(vbar, Qt::Key_PageDown); + QTRY_COMPARE(spy.count(), 2); + QTest::keyClick(vbar, Qt::Key_PageDown); + QTRY_COMPARE(spy.count(), 3); + QTest::keyClick(vbar, Qt::Key_Up); + QTRY_COMPARE(spy.count(), 4); + QTest::keyClick(vbar, Qt::Key_PageUp); + QTRY_COMPARE(spy.count(), 5); +} + QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc"