aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/templates/qquickapplicationwindow.cpp2
-rw-r--r--src/templates/qquickcontrol.cpp32
-rw-r--r--src/templates/qquickcontrol_p_p.h2
-rw-r--r--src/templates/qquickpopup.cpp2
-rw-r--r--tests/auto/controls/data/tst_popup.qml236
5 files changed, 173 insertions, 101 deletions
diff --git a/src/templates/qquickapplicationwindow.cpp b/src/templates/qquickapplicationwindow.cpp
index e702c785..00ca38fb 100644
--- a/src/templates/qquickapplicationwindow.cpp
+++ b/src/templates/qquickapplicationwindow.cpp
@@ -439,7 +439,7 @@ void QQuickApplicationWindow::setLocale(const QLocale &locale)
return;
d->locale = locale;
- QQuickControlPrivate::updateLocaleRecur(contentItem(), locale);
+ QQuickControlPrivate::updateLocaleRecur(QQuickWindow::contentItem(), locale);
emit localeChanged();
}
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp
index 824f7053..5522b996 100644
--- a/src/templates/qquickcontrol.cpp
+++ b/src/templates/qquickcontrol.cpp
@@ -373,7 +373,7 @@ void QQuickControl::itemChange(QQuickItem::ItemChange change, const QQuickItem::
if (change == ItemParentHasChanged && value.item) {
d->resolveFont();
if (!d->hasLocale)
- d->locale = QQuickControlPrivate::calcLocale(d->parentItem);
+ d->updateLocale(QQuickControlPrivate::calcLocale(d->parentItem), false); // explicit=false
}
}
@@ -647,22 +647,21 @@ void QQuickControl::resetLocale()
if (!d->hasLocale)
return;
+ d->hasLocale = false;
d->updateLocale(QQuickControlPrivate::calcLocale(d->parentItem), false); // explicit=false
}
-QLocale QQuickControlPrivate::calcLocale(QQuickItem *q)
+QLocale QQuickControlPrivate::calcLocale(const QQuickItem *item)
{
- QQuickItem *p = q;
+ const QQuickItem *p = item;
while (p) {
- if (QQuickPopupItem *qpi = qobject_cast<QQuickPopupItem *>(p)) {
- if (const QQuickPopup *qp = qobject_cast<const QQuickPopup *>(qpi->parent())) {
- p = qp->parentItem();
- continue;
- }
+ if (const QQuickPopupItem *popup = qobject_cast<const QQuickPopupItem *>(p)) {
+ item = popup;
+ break;
}
- if (QQuickControl *qc = qobject_cast<QQuickControl *>(p))
- return qc->locale();
+ if (const QQuickControl *control = qobject_cast<const QQuickControl *>(p))
+ return control->locale();
QVariant v = p->property("locale");
if (v.isValid() && v.userType() == QMetaType::QLocale)
@@ -671,9 +670,9 @@ QLocale QQuickControlPrivate::calcLocale(QQuickItem *q)
p = p->parentItem();
}
- if (q) {
- if (QQuickApplicationWindow *w = qobject_cast<QQuickApplicationWindow *>(q->window()))
- return w->locale();
+ if (item) {
+ if (QQuickApplicationWindow *window = qobject_cast<QQuickApplicationWindow *>(item->window()))
+ return window->locale();
}
return QLocale();
@@ -706,13 +705,6 @@ void QQuickControlPrivate::updateLocaleRecur(QQuickItem *item, const QLocale &l)
else
updateLocaleRecur(child, l);
}
-
- foreach (QObject *child, item->children()) {
- if (QQuickPopup *qp = qobject_cast<QQuickPopup *>(child)) {
- if (QQuickPopupItem *qpi = qobject_cast<QQuickPopupItem *>(qp->popupItem()))
- updateLocaleRecur(qpi, l);
- }
- }
}
/*!
diff --git a/src/templates/qquickcontrol_p_p.h b/src/templates/qquickcontrol_p_p.h
index cd7a9fb9..fff2487b 100644
--- a/src/templates/qquickcontrol_p_p.h
+++ b/src/templates/qquickcontrol_p_p.h
@@ -106,7 +106,7 @@ public:
void updateLocale(const QLocale &l, bool e);
static void updateLocaleRecur(QQuickItem *item, const QLocale &l);
- static QLocale calcLocale(QQuickItem *);
+ static QLocale calcLocale(const QQuickItem *item);
// TODO: QLazilyAllocated<ExtraData>
QFont font;
diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp
index 90c17e58..8d40dd0c 100644
--- a/src/templates/qquickpopup.cpp
+++ b/src/templates/qquickpopup.cpp
@@ -1177,8 +1177,6 @@ void QQuickPopup::setParentItem(QQuickItem *parent)
d->parentItem = parent;
if (d->positioner.parentItem())
d->positioner.setParentItem(parent);
- if (parent)
- QQuickControlPrivate::updateLocaleRecur(d->popupItem, QQuickControlPrivate::calcLocale(parent));
emit parentChanged();
}
}
diff --git a/tests/auto/controls/data/tst_popup.qml b/tests/auto/controls/data/tst_popup.qml
index 3d54574a..29eef716 100644
--- a/tests/auto/controls/data/tst_popup.qml
+++ b/tests/auto/controls/data/tst_popup.qml
@@ -51,6 +51,12 @@ TestCase {
when: windowShown
name: "Popup"
+ ApplicationWindow {
+ id: applicationWindow
+ width: 480
+ height: 360
+ }
+
Component {
id: popupTemplate
T.Popup { }
@@ -432,11 +438,8 @@ TestCase {
Component {
id: localeComponent
Pane {
- id: panel
- property alias button: _button;
- property alias popup: _popup;
- property alias button1: _button1;
- property alias button2: _button2;
+ property alias button: _button
+ property alias popup: _popup
locale: Qt.locale("en_US")
Column {
Button {
@@ -445,6 +448,8 @@ TestCase {
locale: Qt.locale("nb_NO")
Popup {
id: _popup
+ property alias button1: _button1
+ property alias button2: _button2
y: _button.height
implicitHeight: Math.min(396, _column.contentHeight)
contentItem: Column {
@@ -466,49 +471,61 @@ TestCase {
function test_locale() { // QTBUG_50984
// test looking up natural locale from ancestors
- var control = localeComponent.createObject(testCase)
+ var control = localeComponent.createObject(applicationWindow.contentItem)
verify(control)
verify(control.button)
verify(control.popup)
- verify(control.button1)
- verify(control.button2)
+ verify(control.popup.button1)
+ verify(control.popup.button2)
+ applicationWindow.visible = true
waitForRendering(control)
- control.forceActiveFocus()
- verify(control.activeFocus)
-
- var popup = control.popup
- popup.open()
+ control.popup.open()
+ verify(control.popup.visible)
+ control.ApplicationWindow.window.locale = Qt.locale("fi_FI")
+ compare(control.ApplicationWindow.window.locale.name, "fi_FI")
compare(control.locale.name, "en_US")
compare(control.button.locale.name, "nb_NO")
- compare(control.button1.locale.name, "nb_NO")
- compare(control.button2.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "fi_FI")
+ compare(control.popup.button2.locale.name, "fi_FI")
+ control.ApplicationWindow.window.locale = undefined
+ applicationWindow.visible = false
control.destroy()
}
Component {
- id: localeComponent2
+ id: localeChangeComponent
Pane {
- id: panel
- property alias button: _button;
- property alias popup: _popup;
- property alias button1: _button1;
- property alias button2: _button2;
- property alias localespy: _lspy;
- property alias mirroredspy: _mspy;
- property alias localespy_1: _lspy_1;
- property alias mirroredspy_1: _mspy_1;
- property alias localespy_2: _lspy_2;
- property alias mirroredspy_2: _mspy_2;
+ id: _pane
+ property alias button: _button
+ property alias popup: _popup
+ property SignalSpy localespy: SignalSpy {
+ target: _pane
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _pane
+ signalName: "mirroredChanged"
+ }
Column {
Button {
id: _button
text: "Button"
+ property SignalSpy localespy: SignalSpy {
+ target: _button
+ signalName: "localeChanged"
+ }
+ property SignalSpy mirrorspy: SignalSpy {
+ target: _button
+ signalName: "mirroredChanged"
+ }
Popup {
id: _popup
+ property alias button1: _button1
+ property alias button2: _button2
y: _button.height
implicitHeight: Math.min(396, _column.contentHeight)
contentItem: Column {
@@ -516,13 +533,11 @@ TestCase {
Button {
id: _button1
text: "Button 1"
- SignalSpy {
- id: _lspy_1
+ property SignalSpy localespy: SignalSpy {
target: _button1
signalName: "localeChanged"
}
- SignalSpy {
- id: _mspy_1
+ property SignalSpy mirrorspy: SignalSpy {
target: _button1
signalName: "mirroredChanged"
}
@@ -530,84 +545,151 @@ TestCase {
Button {
id: _button2
text: "Button 2"
- SignalSpy {
- id: _lspy_2
+ property SignalSpy localespy: SignalSpy {
target: _button2
signalName: "localeChanged"
}
- SignalSpy {
- id: _mspy_2
+ property SignalSpy mirrorspy: SignalSpy {
target: _button2
signalName: "mirroredChanged"
}
}
}
}
- SignalSpy {
- id: _lspy
- target: _button
- signalName: "localeChanged"
- }
- SignalSpy {
- id: _mspy
- target: _button
- signalName: "mirroredChanged"
- }
}
}
}
}
- function test_locale_2() { // QTBUG_50984
+ function test_locale_changes() { // QTBUG_50984
// test default locale and locale inheritance
- var control = localeComponent2.createObject(testCase)
+ var control = localeChangeComponent.createObject(applicationWindow.contentItem)
verify(control)
verify(control.button)
verify(control.popup)
- verify(control.button1)
- verify(control.button2)
+ verify(control.popup.button1)
+ verify(control.popup.button2)
+ applicationWindow.visible = true
waitForRendering(control)
- control.forceActiveFocus()
- verify(control.activeFocus)
-
- var popup = control.popup
- popup.open()
+ control.popup.open()
+ verify(control.popup.visible)
var defaultLocale = Qt.locale()
-
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
compare(control.locale.name, defaultLocale.name)
compare(control.button.locale.name, defaultLocale.name)
- compare(control.button1.locale.name, defaultLocale.name)
- compare(control.button2.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
- control.locale = Qt.locale("nb_NO")
- control.localespy.wait()
- compare(control.localespy.count, 1)
- compare(control.mirroredspy.count, 0)
+ control.ApplicationWindow.window.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "nb_NO")
compare(control.locale.name, "nb_NO")
compare(control.button.locale.name, "nb_NO")
- compare(control.button1.locale.name, "nb_NO")
- compare(control.button2.locale.name, "nb_NO")
- compare(control.localespy_1.count, 1)
- compare(control.mirroredspy_1.count, 0)
- compare(control.localespy_2.count, 1)
- compare(control.mirroredspy_2.count, 0)
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "nb_NO")
+ compare(control.localespy.count, 1)
+ compare(control.button.localespy.count, 1)
+ compare(control.popup.button1.localespy.count, 1)
+ compare(control.popup.button2.localespy.count, 1)
- control.locale = Qt.locale("ar_EG")
- control.localespy.wait()
+ control.ApplicationWindow.window.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, defaultLocale.name)
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
compare(control.localespy.count, 2)
- compare(control.mirroredspy.count, 1)
+ compare(control.button.localespy.count, 2)
+ compare(control.popup.button1.localespy.count, 2)
+ compare(control.popup.button2.localespy.count, 2)
+
+ control.locale = Qt.locale("ar_EG")
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
compare(control.locale.name, "ar_EG")
compare(control.button.locale.name, "ar_EG")
- compare(control.button1.locale.name, "ar_EG")
- compare(control.button2.locale.name, "ar_EG")
- compare(control.localespy_1.count, 2)
- compare(control.mirroredspy_1.count, 1)
- compare(control.localespy_2.count, 2)
- compare(control.mirroredspy_2.count, 1)
-
+ compare(control.popup.button1.locale.name, defaultLocale.name)
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 1)
+ compare(control.button.localespy.count, 3)
+ compare(control.button.mirrorspy.count, 1)
+ compare(control.popup.button1.localespy.count, 2)
+ compare(control.popup.button2.localespy.count, 2)
+
+ control.ApplicationWindow.window.locale = Qt.locale("ar_EG")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "ar_EG")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 1)
+ compare(control.button.localespy.count, 3)
+ compare(control.button.mirrorspy.count, 1)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button1.mirrorspy.count, 1)
+ compare(control.popup.button2.localespy.count, 3)
+ compare(control.popup.button2.mirrorspy.count, 1)
+
+ control.button.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 1)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 2)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button2.localespy.count, 3)
+
+ control.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "ar_EG")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 1)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 2)
+ compare(control.popup.button1.localespy.count, 3)
+ compare(control.popup.button2.localespy.count, 3)
+
+ control.popup.button1.locale = Qt.locale("nb_NO")
+ compare(control.ApplicationWindow.window.locale.name, "ar_EG")
+ compare(control.locale.name, "ar_EG")
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, "ar_EG")
+ compare(control.localespy.count, 3)
+ compare(control.mirrorspy.count, 1)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 2)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button2.localespy.count, 3)
+ compare(control.popup.button2.mirrorspy.count, 1)
+
+ control.ApplicationWindow.window.locale = undefined
+ compare(control.ApplicationWindow.window.locale.name, defaultLocale.name)
+ compare(control.locale.name, defaultLocale.name)
+ compare(control.button.locale.name, "nb_NO")
+ compare(control.popup.button1.locale.name, "nb_NO")
+ compare(control.popup.button2.locale.name, defaultLocale.name)
+ compare(control.localespy.count, 4)
+ compare(control.mirrorspy.count, 2)
+ compare(control.button.localespy.count, 4)
+ compare(control.button.mirrorspy.count, 2)
+ compare(control.popup.button1.localespy.count, 4)
+ compare(control.popup.button1.mirrorspy.count, 2)
+ compare(control.popup.button2.localespy.count, 4)
+ compare(control.popup.button2.mirrorspy.count, 2)
+
+ applicationWindow.visible = false
control.destroy()
}