diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-19 12:37:10 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-19 13:19:22 +0000 |
commit | a9735e783761cc2f98001cb72e6aa37315b1af70 (patch) | |
tree | f059a32aed0ac9a7524b473bcb4a9bff62faab6b /src/templates | |
parent | ced4f86ec71abe19ce6e719c37cfb1f74241ac66 (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.cpp | 31 | ||||
-rw-r--r-- | src/templates/qquickcontrol_p_p.h | 3 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 4 |
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(); } } |