Add simple palette to tst_QWidget

When a widget's palette has different active / inactive colors,
multiple paint events can occur. This makes tst_QWidget functions fail
when they expect a spcific amount of paint events and the platform
theme provides a palette with active / inactive differences.

This patch adds a function to populate test widgets with a simple
palette, to prevent multiple paint events.

Pick-to: 6.4
Change-Id: If9b2faedcc5ca87ba24991cedd5e4ac927b02644
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Axel Spoerl 2022-11-25 11:15:26 +01:00
parent 58f885bb3c
commit 1576f82721

View File

@ -433,6 +433,7 @@ private:
const bool m_windowsAnimationsEnabled; const bool m_windowsAnimationsEnabled;
QPointingDevice *m_touchScreen; QPointingDevice *m_touchScreen;
const int m_fuzz; const int m_fuzz;
QPalette simplePalette();
}; };
// Testing get/set functions // Testing get/set functions
@ -4543,6 +4544,7 @@ void tst_QWidget::optimizedResizeMove()
if (m_platform == QStringLiteral("wayland")) if (m_platform == QStringLiteral("wayland"))
QSKIP("Wayland: This fails. Figure out why."); QSKIP("Wayland: This fails. Figure out why.");
QWidget parent; QWidget parent;
parent.setPalette(simplePalette());
parent.setWindowTitle(QLatin1String(QTest::currentTestFunction())); parent.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
parent.resize(400, 400); parent.resize(400, 400);
@ -4626,6 +4628,7 @@ void tst_QWidget::optimizedResize_topLevel()
if (QHighDpiScaling::isActive()) if (QHighDpiScaling::isActive())
QSKIP("Skip due to rounding errors in the regions."); QSKIP("Skip due to rounding errors in the regions.");
StaticWidget topLevel; StaticWidget topLevel;
topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction())); topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
topLevel.gotPaintEvent = false; topLevel.gotPaintEvent = false;
topLevel.show(); topLevel.show();
@ -5237,6 +5240,7 @@ void tst_QWidget::update()
Q_CHECK_PAINTEVENTS Q_CHECK_PAINTEVENTS
UpdateWidget w; UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction())); w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.resize(100, 100); w.resize(100, 100);
centerOnScreen(&w); centerOnScreen(&w);
@ -5250,6 +5254,7 @@ void tst_QWidget::update()
w.reset(); w.reset();
UpdateWidget child(&w); UpdateWidget child(&w);
child.setPalette(simplePalette());
child.setGeometry(10, 10, 80, 80); child.setGeometry(10, 10, 80, 80);
child.show(); child.show();
@ -5321,6 +5326,7 @@ void tst_QWidget::update()
// overlapping sibling // overlapping sibling
UpdateWidget sibling(&w); UpdateWidget sibling(&w);
sibling.setPalette(simplePalette());
child.setGeometry(10, 10, 20, 20); child.setGeometry(10, 10, 20, 20);
sibling.setGeometry(15, 15, 20, 20); sibling.setGeometry(15, 15, 20, 20);
sibling.show(); sibling.show();
@ -5400,9 +5406,11 @@ void tst_QWidget::isOpaque()
{ {
#ifndef Q_OS_MACOS #ifndef Q_OS_MACOS
QWidget w; QWidget w;
w.setPalette(simplePalette());
QVERIFY(::isOpaque(&w)); QVERIFY(::isOpaque(&w));
QWidget child(&w); QWidget child(&w);
child.setPalette(simplePalette());
QVERIFY(!::isOpaque(&child)); QVERIFY(!::isOpaque(&child));
child.setAutoFillBackground(true); child.setAutoFillBackground(true);
@ -5484,6 +5492,7 @@ void tst_QWidget::scroll()
const int h = qMin(500, screen->availableGeometry().height() / 2); const int h = qMin(500, screen->availableGeometry().height() / 2);
UpdateWidget updateWidget; UpdateWidget updateWidget;
updateWidget.setPalette(simplePalette());
updateWidget.resize(w, h); updateWidget.resize(w, h);
updateWidget.reset(); updateWidget.reset();
updateWidget.move(m_availableTopLeft); updateWidget.move(m_availableTopLeft);
@ -8585,6 +8594,7 @@ void tst_QWidget::updateWhileMinimized()
QSKIP("Platform does not support showMinimized()"); QSKIP("Platform does not support showMinimized()");
#endif #endif
UpdateWidget widget; UpdateWidget widget;
widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction())); widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
// Filter out activation change and focus events to avoid update() calls in QWidget. // Filter out activation change and focus events to avoid update() calls in QWidget.
widget.updateOnActivationChangeAndFocusIn = false; widget.updateOnActivationChangeAndFocusIn = false;
@ -9158,6 +9168,7 @@ void tst_QWidget::doubleRepaint()
QSKIP("Not having window server access causes the wrong number of repaints to be issues"); QSKIP("Not having window server access causes the wrong number of repaints to be issues");
#endif #endif
UpdateWidget widget; UpdateWidget widget;
widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction())); widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&widget); centerOnScreen(&widget);
widget.setFocusPolicy(Qt::StrongFocus); widget.setFocusPolicy(Qt::StrongFocus);
@ -9189,6 +9200,7 @@ void tst_QWidget::resizeInPaintEvent()
QWidget window; QWidget window;
window.setWindowTitle(QLatin1String(QTest::currentTestFunction())); window.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
UpdateWidget widget(&window); UpdateWidget widget(&window);
widget.setPalette(simplePalette());
window.resize(200, 200); window.resize(200, 200);
window.show(); window.show();
QApplicationPrivate::setActiveWindow(&window); QApplicationPrivate::setActiveWindow(&window);
@ -9320,6 +9332,7 @@ public slots:
void tst_QWidget::setMaskInResizeEvent() void tst_QWidget::setMaskInResizeEvent()
{ {
UpdateWidget w; UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction())); w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.reset(); w.reset();
w.resize(200, 200); w.resize(200, 200);
@ -9399,6 +9412,7 @@ void tst_QWidget::immediateRepaintAfterInvalidateBackingStore()
QSKIP("We don't support immediate repaint right after show on other platforms."); QSKIP("We don't support immediate repaint right after show on other platforms.");
QScopedPointer<UpdateWidget> widget(new UpdateWidget); QScopedPointer<UpdateWidget> widget(new UpdateWidget);
widget->setPalette(simplePalette());
widget->setWindowTitle(QLatin1String(QTest::currentTestFunction())); widget->setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(widget.data()); centerOnScreen(widget.data());
widget->show(); widget->show();
@ -9850,6 +9864,7 @@ void tst_QWidget::setClearAndResizeMask()
QSKIP("Wayland: This fails. Figure out why."); QSKIP("Wayland: This fails. Figure out why.");
UpdateWidget topLevel; UpdateWidget topLevel;
topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction())); topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
topLevel.resize(160, 160); topLevel.resize(160, 160);
centerOnScreen(&topLevel); centerOnScreen(&topLevel);
@ -9884,6 +9899,7 @@ void tst_QWidget::setClearAndResizeMask()
} }
UpdateWidget child(&topLevel); UpdateWidget child(&topLevel);
child.setPalette(simplePalette());
child.setAutoFillBackground(true); // NB! Opaque child. child.setAutoFillBackground(true); // NB! Opaque child.
child.setPalette(Qt::red); child.setPalette(Qt::red);
child.resize(100, 100); child.resize(100, 100);
@ -10684,6 +10700,7 @@ void tst_QWidget::focusWidget_task254563()
void tst_QWidget::destroyBackingStore() void tst_QWidget::destroyBackingStore()
{ {
UpdateWidget w; UpdateWidget w;
w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction())); w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&w); centerOnScreen(&w);
w.reset(); w.reset();
@ -12390,6 +12407,7 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282()
widget.resize(200,200); widget.resize(200,200);
UpdateWidget childWidget(&widget); UpdateWidget childWidget(&widget);
childWidget.setPalette(simplePalette());
childWidget.setAttribute(Qt::WA_StaticContents); childWidget.setAttribute(Qt::WA_StaticContents);
childWidget.setAttribute(Qt::WA_OpaquePaintEvent); childWidget.setAttribute(Qt::WA_OpaquePaintEvent);
childWidget.setGeometry(250, 250, 500, 500); childWidget.setGeometry(250, 250, 500, 500);
@ -12986,6 +13004,35 @@ void tst_QWidget::activateWhileModalHidden()
QCOMPARE(QApplication::activeWindow(), &window); QCOMPARE(QApplication::activeWindow(), &window);
} }
// Create a simple palette to prevent multiple paint events
QPalette tst_QWidget::simplePalette()
{
static QPalette simplePalette = []{
const QColor windowText = Qt::black;
const QColor backGround = QColor(239, 239, 239);
const QColor light = backGround.lighter(150);
const QColor mid = (backGround.darker(130));
const QColor midLight = mid.lighter(110);
const QColor base = Qt::white;
const QColor dark = backGround.darker(150);
const QColor text = Qt::black;
const QColor highlight = QColor(48, 140, 198);
const QColor hightlightedText = Qt::white;
const QColor button = backGround;
const QColor shadow = dark.darker(135);
QPalette defaultPalette(windowText, backGround, light, dark, mid, text, base);
defaultPalette.setBrush(QPalette::Midlight, midLight);
defaultPalette.setBrush(QPalette::Button, button);
defaultPalette.setBrush(QPalette::Shadow, shadow);
defaultPalette.setBrush(QPalette::HighlightedText, hightlightedText);
defaultPalette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
return defaultPalette;
}();
return simplePalette;
}
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
void tst_QWidget::showFullscreenAndroid() void tst_QWidget::showFullscreenAndroid()
{ {