diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 8533b393983..13162800ac7 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -457,8 +457,10 @@ QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics s QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization bool QApplicationPrivate::runtime_graphics_system = false; +#ifndef Q_WS_QPA Q_GLOBAL_STATIC(QMutex, applicationFontMutex) QFont *QApplicationPrivate::app_font = 0; // default application font +#endif QFont *QApplicationPrivate::sys_font = 0; // default system font QFont *QApplicationPrivate::set_font = 0; // default font set by programmer @@ -1146,11 +1148,14 @@ QApplication::~QApplication() QApplicationPrivate::set_pal = 0; app_palettes()->clear(); +#ifndef Q_WS_QPA { QMutexLocker locker(applicationFontMutex()); delete QApplicationPrivate::app_font; QApplicationPrivate::app_font = 0; } +#endif + delete QApplicationPrivate::sys_font; QApplicationPrivate::sys_font = 0; delete QApplicationPrivate::set_font; @@ -1940,10 +1945,14 @@ void QApplicationPrivate::setSystemPalette(const QPalette &pal) */ QFont QApplication::font() { +#ifndef Q_WS_QPA QMutexLocker locker(applicationFontMutex()); if (!QApplicationPrivate::app_font) QApplicationPrivate::app_font = new QFont(QLatin1String("Helvetica")); return *QApplicationPrivate::app_font; +#else + return QGuiApplication::font(); +#endif } /*! @@ -2022,11 +2031,15 @@ void QApplication::setFont(const QFont &font, const char *className) bool all = false; FontHash *hash = app_fonts(); if (!className) { +#ifndef Q_WS_QPA QMutexLocker locker(applicationFontMutex()); if (!QApplicationPrivate::app_font) QApplicationPrivate::app_font = new QFont(font); else *QApplicationPrivate::app_font = font; +#else + QGuiApplication::setFont(font); +#endif if (hash && hash->size()) { all = true; hash->clear(); diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 4127048c917..2b7ec31b738 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -432,7 +432,9 @@ public: static bool runtime_graphics_system; private: +#ifndef Q_WS_QPA static QFont *app_font; // private for a reason! Always use QApplication::font() instead! +#endif public: static QFont *sys_font; static QFont *set_font; diff --git a/src/gui/kernel/qguiapplication_qpa.cpp b/src/gui/kernel/qguiapplication_qpa.cpp index 67ad5a7169d..df03c44c73f 100644 --- a/src/gui/kernel/qguiapplication_qpa.cpp +++ b/src/gui/kernel/qguiapplication_qpa.cpp @@ -47,6 +47,7 @@ #include #include +#include #include #include @@ -92,6 +93,9 @@ QGuiApplicationPrivate *QGuiApplicationPrivate::self = 0; QClipboard *QGuiApplicationPrivate::qt_clipboard = 0; #endif +Q_GLOBAL_STATIC(QMutex, applicationFontMutex) +QFont *QGuiApplicationPrivate::app_font = 0; + QGuiApplication::QGuiApplication(int &argc, char **argv, int flags) : QCoreApplication(*new QGuiApplicationPrivate(argc, argv, flags)) { @@ -738,5 +742,21 @@ QClipboard * QGuiApplication::clipboard() } #endif +QFont QGuiApplication::font() +{ + QMutexLocker locker(applicationFontMutex()); + if (!QGuiApplicationPrivate::app_font) + QGuiApplicationPrivate::app_font = new QFont(QLatin1String("Helvetica")); + return *QGuiApplicationPrivate::app_font; +} + +void QGuiApplication::setFont(const QFont &font) +{ + QMutexLocker locker(applicationFontMutex()); + if (!QGuiApplicationPrivate::app_font) + QGuiApplicationPrivate::app_font = new QFont(font); + else + *QGuiApplicationPrivate::app_font = font; +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qguiapplication_qpa.h b/src/gui/kernel/qguiapplication_qpa.h index 4be4e193efd..707510717c5 100644 --- a/src/gui/kernel/qguiapplication_qpa.h +++ b/src/gui/kernel/qguiapplication_qpa.h @@ -72,14 +72,11 @@ public: static void setOverrideCursor(const QCursor &); static void changeOverrideCursor(const QCursor &); static void restoreOverrideCursor(); +#endif #endif static QFont font(); - static QFont font(const QWidget*); - static QFont font(const char *className); - static void setFont(const QFont &, const char* className = 0); - static QFontMetrics fontMetrics(); -#endif + static void setFont(const QFont &); #ifndef QT_NO_CLIPBOARD static QClipboard *clipboard(); diff --git a/src/gui/kernel/qguiapplication_qpa_p.h b/src/gui/kernel/qguiapplication_qpa_p.h index b3ecd01703a..d1ea9987680 100644 --- a/src/gui/kernel/qguiapplication_qpa_p.h +++ b/src/gui/kernel/qguiapplication_qpa_p.h @@ -117,6 +117,8 @@ public: #ifndef QT_NO_CLIPBOARD static QClipboard *qt_clipboard; #endif + + static QFont *app_font; private: void init();