diff options
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp')
-rw-r--r-- | tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 50 |
1 files changed, 42 insertions, 8 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 833111644e..2e0d293399 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -417,6 +417,7 @@ private slots: void winIdAfterClose(); void receivesLanguageChangeEvent(); + void receivesApplicationFontChangeEvent(); private: bool ensureScreenSize(int width, int height); @@ -11626,30 +11627,36 @@ void tst_QWidget::winIdAfterClose() delete spy; } -class LanguageChangeEventWidget : public QWidget +class ChangeEventWidget : public QWidget { public: - LanguageChangeEventWidget(QWidget *parent = nullptr) : QWidget(parent) {} + ChangeEventWidget(QWidget *parent = nullptr) : QWidget(parent) {} int languageChangeCount = 0; + int applicationFontChangeCount = 0; protected: bool event(QEvent *e) override { if (e->type() == QEvent::LanguageChange) languageChangeCount++; + else if (e->type() == QEvent::ApplicationFontChange) + applicationFontChangeCount++; return QWidget::event(e); } }; -class LanguageChangeEventWindow : public QWindow +class ChangeEventWindow : public QWindow { public: - LanguageChangeEventWindow(QWindow *parent = nullptr) : QWindow(parent) {} + ChangeEventWindow(QWindow *parent = nullptr) : QWindow(parent) {} int languageChangeCount = 0; + int applicationFontChangeCount = 0; protected: bool event(QEvent *e) override { if (e->type() == QEvent::LanguageChange) languageChangeCount++; + else if (e->type() == QEvent::ApplicationFontChange) + applicationFontChangeCount++; return QWindow::event(e); } }; @@ -11658,14 +11665,14 @@ void tst_QWidget::receivesLanguageChangeEvent() { // Confirm that any QWindow or QWidget only gets a single // LanguageChange event when a translator is installed - LanguageChangeEventWidget topLevel; - auto childWidget = new LanguageChangeEventWidget(&topLevel); + ChangeEventWidget topLevel; + auto childWidget = new ChangeEventWidget(&topLevel); topLevel.show(); QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); - LanguageChangeEventWindow ww; + ChangeEventWindow ww; ww.show(); QVERIFY(QTest::qWaitForWindowExposed(&ww)); - LanguageChangeEventWidget topLevelNotShown; + ChangeEventWidget topLevelNotShown; QTranslator t; QVERIFY(t.load("hellotr_la.qm", ":/")); QVERIFY(qApp->installTranslator(&t)); @@ -11676,5 +11683,32 @@ void tst_QWidget::receivesLanguageChangeEvent() QCOMPARE(ww.languageChangeCount, 1); } +void tst_QWidget::receivesApplicationFontChangeEvent() +{ + // Confirm that any QWindow or top level QWidget only gets a single + // ApplicationFontChange event when the font is changed + const QFont origFont = QApplication::font(); + + ChangeEventWidget topLevel; + auto childWidget = new ChangeEventWidget(&topLevel); + topLevel.show(); + QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); + ChangeEventWindow ww; + ww.show(); + QVERIFY(QTest::qWaitForWindowExposed(&ww)); + ChangeEventWidget topLevelNotShown; + QFont changedFont = origFont; + changedFont.setPointSize(changedFont.pointSize() + 2); + QApplication::setFont(changedFont); + QCoreApplication::sendPostedEvents(0, QEvent::ApplicationFontChange); + QCOMPARE(topLevel.applicationFontChangeCount, 1); + QCOMPARE(topLevelNotShown.applicationFontChangeCount, 1); + // QWidget should not be passing the event on automatically + QCOMPARE(childWidget->applicationFontChangeCount, 0); + QCOMPARE(ww.applicationFontChangeCount, 1); + + QApplication::setFont(origFont); +} + QTEST_MAIN(tst_QWidget) #include "tst_qwidget.moc" |