diff options
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/widgets/kernel/qapplication/customstyle.json | 3 | ||||
-rw-r--r-- | tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp | 76 |
2 files changed, 79 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qapplication/customstyle.json b/tests/auto/widgets/kernel/qapplication/customstyle.json new file mode 100644 index 0000000000..35b80f636c --- /dev/null +++ b/tests/auto/widgets/kernel/qapplication/customstyle.json @@ -0,0 +1,3 @@ +{ + "Keys": [ "customstyle" ] +} diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp index 8a2297c359..a62f6c5699 100644 --- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp +++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp @@ -26,6 +26,8 @@ ** ****************************************************************************/ +#define QT_STATICPLUGIN +#include <QtWidgets/qstyleplugin.h> #include <qdebug.h> @@ -54,6 +56,7 @@ #include <QtWidgets/QScrollBar> #include <QtWidgets/private/qapplication_p.h> #include <QtWidgets/QStyle> +#include <QtWidgets/qproxystyle.h> #include <qpa/qwindowsysteminterface.h> #include <qpa/qwindowsysteminterface_p.h> @@ -128,6 +131,7 @@ private slots: void task109149(); void style(); + void applicationPalettePolish(); void allWidgets(); void topLevelWidgets(); @@ -1798,6 +1802,78 @@ void tst_QApplication::style() QVERIFY(QApplication::style() != nullptr); } +class CustomStyle : public QProxyStyle +{ +public: + CustomStyle() : QProxyStyle("Windows") { Q_ASSERT(!polished); } + ~CustomStyle() { polished = 0; } + void polish(QPalette &palette) + { + polished++; + palette.setColor(QPalette::Active, QPalette::Link, Qt::red); + } + static int polished; +}; + +int CustomStyle::polished = 0; + +class CustomStylePlugin : public QStylePlugin +{ + Q_OBJECT + Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "customstyle.json") +public: + QStyle *create(const QString &) { return new CustomStyle; } +}; + +Q_IMPORT_PLUGIN(CustomStylePlugin) + +void tst_QApplication::applicationPalettePolish() +{ + int argc = 1; + +#if defined(QT_BUILD_INTERNAL) + { + qputenv("QT_DESKTOP_STYLE_KEY", "customstyle"); + QApplication app(argc, &argv0); + QVERIFY(CustomStyle::polished); + QVERIFY(!app.palette().resolve()); + QCOMPARE(app.palette().color(QPalette::Link), Qt::red); + qunsetenv("QT_DESKTOP_STYLE_KEY"); + } +#endif + + { + QApplication::setStyle(new CustomStyle); + QApplication app(argc, &argv0); + QVERIFY(CustomStyle::polished); + QVERIFY(!app.palette().resolve()); + QCOMPARE(app.palette().color(QPalette::Link), Qt::red); + } + + { + QApplication app(argc, &argv0); + app.setStyle(new CustomStyle); + QVERIFY(CustomStyle::polished); + QVERIFY(!app.palette().resolve()); + QCOMPARE(app.palette().color(QPalette::Link), Qt::red); + + CustomStyle::polished = 0; + app.setPalette(QPalette()); + QVERIFY(CustomStyle::polished); + QVERIFY(!app.palette().resolve()); + QCOMPARE(app.palette().color(QPalette::Link), Qt::red); + + CustomStyle::polished = 0; + QPalette palette; + palette.setColor(QPalette::Active, QPalette::Highlight, Qt::green); + app.setPalette(palette); + QVERIFY(CustomStyle::polished); + QVERIFY(app.palette().resolve()); + QCOMPARE(app.palette().color(QPalette::Link), Qt::red); + QCOMPARE(app.palette().color(QPalette::Highlight), Qt::green); + } +} + void tst_QApplication::allWidgets() { int argc = 1; |