aboutsummaryrefslogtreecommitdiffstats
path: root/src/templates
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2016-02-19 12:37:10 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2016-02-19 13:19:22 +0000
commita9735e783761cc2f98001cb72e6aa37315b1af70 (patch)
treef059a32aed0ac9a7524b473bcb4a9bff62faab6b /src/templates
parentced4f86ec71abe19ce6e719c37cfb1f74241ac66 (diff)
Controls: fix locale inheritance for popups
QQuickPopup is a QObject, not a QQuickControl. Then need to make QQuickPopup::popupItem() inherit its locale from QQuickPopup::parentItem(). Task-number: QTBUG-50984 Change-Id: Ie5908f86a154502962d6406dd4067b46cc527de7 Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r--src/templates/qquickcontrol.cpp31
-rw-r--r--src/templates/qquickcontrol_p_p.h3
-rw-r--r--src/templates/qquickpopup.cpp4
3 files changed, 28 insertions, 10 deletions
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp
index b6b85531..5636d84f 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 && isComponentComplete()) {
d->resolveFont();
if (!d->hasLocale)
- d->locale = d->calcLocale();
+ d->locale = QQuickControlPrivate::calcLocale(d->parentItem);
}
}
@@ -652,14 +652,20 @@ void QQuickControl::resetLocale()
if (!d->hasLocale)
return;
- d->updateLocale(d->calcLocale(), false); // explicit=false
+ d->updateLocale(QQuickControlPrivate::calcLocale(d->parentItem), false); // explicit=false
}
-QLocale QQuickControlPrivate::calcLocale() const
+QLocale QQuickControlPrivate::calcLocale(QQuickItem *q)
{
- Q_Q(const QQuickControl);
- QQuickItem *p = q->parentItem();
+ QQuickItem *p = q;
while (p) {
+ if (QQuickPopupItem *qpi = qobject_cast<QQuickPopupItem *>(p)) {
+ if (const QQuickPopup *qp = qobject_cast<const QQuickPopup *>(qpi->parent())) {
+ p = qp->parentItem();
+ continue;
+ }
+ }
+
if (QQuickControl *qc = qobject_cast<QQuickControl *>(p))
return qc->locale();
@@ -670,8 +676,10 @@ QLocale QQuickControlPrivate::calcLocale() const
p = p->parentItem();
}
- if (QQuickApplicationWindow *w = qobject_cast<QQuickApplicationWindow *>(q->window()))
- return w->locale();
+ if (q) {
+ if (QQuickApplicationWindow *w = qobject_cast<QQuickApplicationWindow *>(q->window()))
+ return w->locale();
+ }
return QLocale();
}
@@ -703,6 +711,13 @@ 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);
+ }
+ }
}
/*!
@@ -824,6 +839,8 @@ void QQuickControl::componentComplete()
Q_D(QQuickControl);
QQuickItem::componentComplete();
d->resolveFont();
+ if (!d->hasLocale)
+ d->locale = QQuickControlPrivate::calcLocale(d->parentItem);
#ifndef QT_NO_ACCESSIBILITY
if (!d->accessibleAttached && QAccessible::isActive())
accessibilityActiveChanged(true);
diff --git a/src/templates/qquickcontrol_p_p.h b/src/templates/qquickcontrol_p_p.h
index 21f6c1b1..d7821ec7 100644
--- a/src/templates/qquickcontrol_p_p.h
+++ b/src/templates/qquickcontrol_p_p.h
@@ -104,8 +104,7 @@ public:
static QFont themeFont(QPlatformTheme::Font type);
void updateLocale(const QLocale &l, bool e);
static void updateLocaleRecur(QQuickItem *item, const QLocale &l);
-
- QLocale calcLocale() const;
+ static QLocale calcLocale(QQuickItem *);
QFont font;
bool hasTopPadding;
diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp
index 7bd5baf9..00b7ed84 100644
--- a/src/templates/qquickpopup.cpp
+++ b/src/templates/qquickpopup.cpp
@@ -1228,8 +1228,10 @@ void QQuickPopup::setParentItem(QQuickItem *parent)
d->parentItem = parent;
if (d->positioner.parentItem())
d->positioner.setParentItem(parent);
- if (d->popupItem)
+ if (d->popupItem) {
QQuickControlPrivate::updateFontRecur(d->popupItem, QQuickControlPrivate::naturalControlFont(parent));
+ QQuickControlPrivate::updateLocaleRecur(d->popupItem, QQuickControlPrivate::calcLocale(parent));
+ }
emit parentChanged();
}
}