diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 1a2dabc742d..8a0caf5962f 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -726,8 +726,7 @@ void QPlainTextEditPrivate::updateViewport() QPlainTextEditPrivate::QPlainTextEditPrivate() : tabChangesFocus(false), showCursorOnInitialShow(false), backgroundVisible(false), - centerOnScroll(false), inDrag(false), clickCausedFocus(false), placeholderVisible(true), - pageUpDownLastCursorYIsValid(false) + centerOnScroll(false), inDrag(false), clickCausedFocus(false), pageUpDownLastCursorYIsValid(false) { } @@ -800,14 +799,7 @@ void QPlainTextEditPrivate::updatePlaceholderVisibility() // document that has changed (in repaintContents). But the placeholder // text is not a part of the document, but is drawn on separately. So whenever // we either show or hide the placeholder text, we issue a full update. - bool placeholderCurrentyVisible = placeholderVisible; - - placeholderVisible = !placeholderText.isEmpty() - && q->document()->isEmpty() - && (!q->firstVisibleBlock().isValid() || - q->firstVisibleBlock().layout()->preeditAreaText().isEmpty()); - - if (placeholderCurrentyVisible != placeholderVisible) + if (q->document()->isEmpty()) viewport->update(); } @@ -1910,7 +1902,7 @@ void QPlainTextEdit::paintEvent(QPaintEvent *e) er.setRight(qMin(er.right(), maxX)); painter.setClipRect(er); - if (d->placeholderVisible) { + if (d->isPlaceHolderTextVisible()) { const QColor col = d->control->palette().placeholderText().color(); painter.setPen(col); painter.setClipRect(e->rect()); diff --git a/src/widgets/widgets/qplaintextedit_p.h b/src/widgets/widgets/qplaintextedit_p.h index 4cb754bd68a..6e4aa8133c2 100644 --- a/src/widgets/widgets/qplaintextedit_p.h +++ b/src/widgets/widgets/qplaintextedit_p.h @@ -128,7 +128,6 @@ public: uint centerOnScroll : 1; uint inDrag : 1; uint clickCausedFocus : 1; - uint placeholderVisible : 1; uint pageUpDownLastCursorYIsValid : 1; void setTopLine(int visualTopLine, int dx = 0); @@ -144,6 +143,11 @@ public: void cursorPositionChanged(); void modificationChanged(bool); + inline bool isPlaceHolderTextVisible() + { + Q_Q(QPlainTextEdit); + return q->document()->isEmpty() && !q->placeholderText().isEmpty(); + } }; QT_END_NAMESPACE diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index ed68c735d45..bec4a55814a 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -1830,7 +1830,7 @@ void tst_QPlainTextEdit::placeholderVisibility_data() QTest::addColumn>("setupCommands"); QTest::addColumn("placeholderVisible"); QTest::addRow("no placeholder set + no text set") - << QList{} << true; + << QList{} << false; QTest::addRow("no placeholder set + text set or text set + no placeholder set") << QList{ SetContent } << false; QTest::addRow("no placeholder set + text set + empty text set") @@ -1840,7 +1840,7 @@ void tst_QPlainTextEdit::placeholderVisibility_data() << QList{ ClearContent, SetContent } << false; QTest::addRow("empty placeholder set + no text set") - << QList{ ClearPlaceHolder } << true; + << QList{ ClearPlaceHolder } << false; QTest::addRow("empty placeholder set + text set") << QList{ ClearPlaceHolder, SetContent } << false; @@ -1917,7 +1917,7 @@ void tst_QPlainTextEdit::placeholderVisibility() plainTextEdit.show(); QVERIFY(QTest::qWaitForWindowExposed(&plainTextEdit)); - QTRY_VERIFY(plainTextEdit_d->placeholderVisible == placeholderVisible); + QTRY_VERIFY(plainTextEdit_d->isPlaceHolderTextVisible() == placeholderVisible); }