summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp')
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 9c16b1a00a..d8f4881ffa 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -410,6 +410,7 @@ private slots:
void closeWithChildWindow();
void winIdAfterClose();
+ void receivesLanguageChangeEvent();
private:
bool ensureScreenSize(int width, int height);
@@ -11360,5 +11361,55 @@ void tst_QWidget::winIdAfterClose()
delete spy;
}
+class LanguageChangeEventWidget : public QWidget
+{
+public:
+ LanguageChangeEventWidget(QWidget *parent = nullptr) : QWidget(parent) {}
+ int languageChangeCount = 0;
+protected:
+ bool event(QEvent *e) override
+ {
+ if (e->type() == QEvent::LanguageChange)
+ languageChangeCount++;
+ return QWidget::event(e);
+ }
+};
+
+class LanguageChangeEventWindow : public QWindow
+{
+public:
+ LanguageChangeEventWindow(QWindow *parent = nullptr) : QWindow(parent) {}
+ int languageChangeCount = 0;
+protected:
+ bool event(QEvent *e) override
+ {
+ if (e->type() == QEvent::LanguageChange)
+ languageChangeCount++;
+ return QWindow::event(e);
+ }
+};
+
+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);
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ LanguageChangeEventWindow ww;
+ ww.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&ww));
+ LanguageChangeEventWidget topLevelNotShown;
+ QTranslator t;
+ QVERIFY(t.load("hellotr_la.qm", ":/"));
+ QVERIFY(qApp->installTranslator(&t));
+ QCoreApplication::sendPostedEvents(0, QEvent::LanguageChange);
+ QCOMPARE(topLevel.languageChangeCount, 1);
+ QCOMPARE(topLevelNotShown.languageChangeCount, 1);
+ QCOMPARE(childWidget->languageChangeCount, 1);
+ QCOMPARE(ww.languageChangeCount, 1);
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"