diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-03-16 14:04:13 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-03-17 09:41:01 +0000 |
commit | 5b4093e415d5a2d49ef396d89b3262339b0651a4 (patch) | |
tree | 1cd7162e8a6fe2145c6dd228100bad6a67f698e3 | |
parent | 8f4cf38d53945bb64cef5f54b31d14aeccf6cefe (diff) |
Change locale inheritance for popups
The last one in the series of making Popup inherit its properties from
the parent window instead of the parent item. The same change was done
for font and style already.
Change-Id: I7024cce13f501e92024e9110e87ed33bbae6533d
Task-number: QTBUG-50984
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r-- | src/templates/qquickapplicationwindow.cpp | 2 | ||||
-rw-r--r-- | src/templates/qquickcontrol.cpp | 32 | ||||
-rw-r--r-- | src/templates/qquickcontrol_p_p.h | 2 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 2 | ||||
-rw-r--r-- | tests/auto/controls/data/tst_popup.qml | 236 |
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() } |