aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-16 14:04:13 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-17 09:41:01 +0000
commit5b4093e415d5a2d49ef396d89b3262339b0651a4 (patch)
tree1cd7162e8a6fe2145c6dd228100bad6a67f698e3
parent8f4cf38d53945bb64cef5f54b31d14aeccf6cefe (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.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()
}