From e5b422382a512a8267a0eb24e6543a8cf84478d9 Mon Sep 17 00:00:00 2001 From: Kai Uwe Broulik Date: Wed, 27 Sep 2017 11:51:58 +0200 Subject: QGuiApplication: Add fontChanged signal This removes the need to install an event filter on qApp just for this. A similar thing was done with setPalette to reduce the number of event filters in e.g. SystemPalette and Quick Controls. [ChangeLog][QtGui][QGuiApplication] Added fontChanged signal Change-Id: Ifa843aa42b91ac63ab17c3b064ac0e764aac77d3 Reviewed-by: J-P Nurmi --- src/gui/kernel/qguiapplication.cpp | 14 ++++++++++++ src/gui/kernel/qguiapplication.h | 1 + .../kernel/qguiapplication/tst_qguiapplication.cpp | 26 ++++++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 8149fa3905..3d85f47f34 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -3109,6 +3109,15 @@ void QGuiApplicationPrivate::applyWindowGeometrySpecificationTo(QWindow *window) windowGeometrySpecification.applyTo(window); } +/*! + \since 5.11 + \fn void QGuiApplication::fontChanged(const QFont &font) + + This signal is emitted when the \a font of the application changes. + + \sa font() +*/ + /*! Returns the default application font. @@ -3130,11 +3139,16 @@ QFont QGuiApplication::font() void QGuiApplication::setFont(const QFont &font) { QMutexLocker locker(&applicationFontMutex); + const bool emitChange = !QGuiApplicationPrivate::app_font + || (*QGuiApplicationPrivate::app_font != font); if (!QGuiApplicationPrivate::app_font) QGuiApplicationPrivate::app_font = new QFont(font); else *QGuiApplicationPrivate::app_font = font; applicationResourceFlags |= ApplicationFontExplicitlySet; + + if (emitChange && qGuiApp) + emit qGuiApp->fontChanged(*QGuiApplicationPrivate::app_font); } /*! diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h index 8560fcf18a..02dffef0fe 100644 --- a/src/gui/kernel/qguiapplication.h +++ b/src/gui/kernel/qguiapplication.h @@ -187,6 +187,7 @@ Q_SIGNALS: #endif void paletteChanged(const QPalette &pal); void applicationDisplayNameChanged(); + void fontChanged(const QFont &font); protected: bool event(QEvent *) override; diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp index 6ba488aaa7..4f27aeb899 100644 --- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp +++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp @@ -68,6 +68,7 @@ private slots: void changeFocusWindow(); void keyboardModifiers(); void palette(); + void font(); void modalWindow(); void quitOnLastWindowClosed(); void quitOnLastWindowClosedMulti(); @@ -524,6 +525,31 @@ void tst_QGuiApplication::palette() QCOMPARE(signalSpy.count(), 2); } +void tst_QGuiApplication::font() +{ + int argc = 1; + char *argv[] = { const_cast("tst_qguiapplication") }; + QGuiApplication app(argc, argv); + QSignalSpy signalSpy(&app, SIGNAL(fontChanged(QFont))); + + QFont oldFont = QGuiApplication::font(); + QFont newFont = QFont("BogusFont", 33); + + QGuiApplication::setFont(newFont); + QCOMPARE(QGuiApplication::font(), newFont); + QCOMPARE(signalSpy.count(), 1); + QCOMPARE(signalSpy.at(0).at(0), QVariant(newFont)); + + QGuiApplication::setFont(oldFont); + QCOMPARE(QGuiApplication::font(), oldFont); + QCOMPARE(signalSpy.count(), 2); + QCOMPARE(signalSpy.at(1).at(0), QVariant(oldFont)); + + QGuiApplication::setFont(oldFont); + QCOMPARE(QGuiApplication::font(), oldFont); + QCOMPARE(signalSpy.count(), 2); +} + class BlockableWindow : public QWindow { Q_OBJECT -- cgit v1.2.3