summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets/kernel')
-rw-r--r--tests/auto/widgets/kernel/qwidget/hellotr_la.qmbin0 -> 237 bytes
-rw-r--r--tests/auto/widgets/kernel/qwidget/qwidget.qrc1
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp51
3 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/widgets/kernel/qwidget/hellotr_la.qm b/tests/auto/widgets/kernel/qwidget/hellotr_la.qm
new file mode 100644
index 0000000000..25c0aad583
--- /dev/null
+++ b/tests/auto/widgets/kernel/qwidget/hellotr_la.qm
Binary files differ
diff --git a/tests/auto/widgets/kernel/qwidget/qwidget.qrc b/tests/auto/widgets/kernel/qwidget/qwidget.qrc
index 1399c4c9db..597ea872a5 100644
--- a/tests/auto/widgets/kernel/qwidget/qwidget.qrc
+++ b/tests/auto/widgets/kernel/qwidget/qwidget.qrc
@@ -3,5 +3,6 @@
<file>geometry.dat</file>
<file>geometry-maximized.dat</file>
<file>geometry-fullscreen.dat</file>
+ <file>hellotr_la.qm</file>
</qresource>
</RCC>
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"