summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKai Uwe Broulik <kde@privat.broulik.de>2017-09-27 11:51:58 +0200
committerKai Uwe Broulik <kde@privat.broulik.de>2018-01-11 10:25:05 +0000
commite5b422382a512a8267a0eb24e6543a8cf84478d9 (patch)
tree83c067aed099d0f03acac649c8a18f0d7d19fc34
parentd51dde6c67155f774bb88b9cd64c6b061cfa5d46 (diff)
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 <jpnurmi@qt.io>
-rw-r--r--src/gui/kernel/qguiapplication.cpp14
-rw-r--r--src/gui/kernel/qguiapplication.h1
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp26
3 files changed, 41 insertions, 0 deletions
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
@@ -3110,6 +3110,15 @@ void QGuiApplicationPrivate::applyWindowGeometrySpecificationTo(QWindow *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.
\sa setFont()
@@ -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<char*>("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