diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-11 13:09:48 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-02-18 12:53:28 +0000 |
commit | a40591931dd372829982055d4000c5caf3df9d07 (patch) | |
tree | 9a60890e99b1017433ae433049005953935dca98 /src/templates | |
parent | 3cba8b19c4e67cbcd6977bf141d7ddf2e54aae85 (diff) |
Controls: fix font inheritance for popups
QQuickPopup is a QObject, not a QQuickControl. Then need to make
QQuickPopup::popupItem() inherit its font from QQuickPopup::parentItem().
Task-number: QTBUG-50984
Change-Id: I7f417474172b533b744eb668a0476cdcbabba868
Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/templates')
-rw-r--r-- | src/templates/qquickcontrol.cpp | 16 | ||||
-rw-r--r-- | src/templates/qquickpopup.cpp | 9 | ||||
-rw-r--r-- | src/templates/qquickpopup_p_p.h | 3 |
3 files changed, 23 insertions, 5 deletions
diff --git a/src/templates/qquickcontrol.cpp b/src/templates/qquickcontrol.cpp index d4c54806..b6b85531 100644 --- a/src/templates/qquickcontrol.cpp +++ b/src/templates/qquickcontrol.cpp @@ -44,6 +44,8 @@ #include "qquicktextarea_p_p.h" #include "qquicktextfield_p.h" #include "qquicktextfield_p_p.h" +#include "qquickpopup_p.h" +#include "qquickpopup_p_p.h" #include "qquickapplicationwindow_p.h" #include <QtGui/private/qguiapplication_p.h> @@ -223,7 +225,12 @@ QFont QQuickControlPrivate::naturalControlFont(const QQuickItem *q) QQuickItem *p = q->parentItem(); bool found = false; while (p) { - if (QQuickControl *qc = qobject_cast<QQuickControl *>(p)) { + if (QQuickPopupItem *qpi = qobject_cast<QQuickPopupItem *>(p)) { + if (const QQuickPopup *qp = qobject_cast<const QQuickPopup *>(qpi->parent())) { + p = qp->parentItem(); + continue; + } + } else if (QQuickControl *qc = qobject_cast<QQuickControl *>(p)) { naturalFont = qc->font(); found = true; break; @@ -296,6 +303,13 @@ void QQuickControlPrivate::updateFontRecur(QQuickItem *item, const QFont &f) else QQuickControlPrivate::updateFontRecur(child, f); } + + foreach (QObject *child, item->children()) { + if (QQuickPopup *qp = qobject_cast<QQuickPopup *>(child)) { + if (QQuickPopupItem *qpi = qobject_cast<QQuickPopupItem *>(qp->popupItem())) + QQuickControlPrivate::updateFontRecur(qpi, f); + } + } } QString QQuickControl::accessibleName() const diff --git a/src/templates/qquickpopup.cpp b/src/templates/qquickpopup.cpp index 3f9fa2c9..7bd5baf9 100644 --- a/src/templates/qquickpopup.cpp +++ b/src/templates/qquickpopup.cpp @@ -38,6 +38,7 @@ #include "qquickpopup_p_p.h" #include "qquickapplicationwindow_p.h" #include "qquickoverlay_p.h" +#include "qquickcontrol_p_p.h" #include <QtQml/qqmlinfo.h> #include <QtQuick/qquickitem.h> @@ -285,7 +286,7 @@ void QQuickPopupPrivate::setBottomPadding(qreal value, bool reset) } } -class QQuickPopupItemPrivate : public QQuickItemPrivate +class QQuickPopupItemPrivate : public QQuickControlPrivate { Q_DECLARE_PUBLIC(QQuickPopupItem) @@ -314,7 +315,7 @@ void QQuickPopupItemPrivate::implicitHeightChanged() } QQuickPopupItem::QQuickPopupItem(QQuickPopup *popup) : - QQuickItem(*(new QQuickPopupItemPrivate(popup))) + QQuickControl(*(new QQuickPopupItemPrivate(popup)), Q_NULLPTR) { setParent(popup); setVisible(false); @@ -391,7 +392,7 @@ void QQuickPopupItem::geometryChanged(const QRectF &newGeometry, const QRectF &o void QQuickPopupItem::itemChange(ItemChange change, const ItemChangeData &data) { Q_D(QQuickPopupItem); - QQuickItem::itemChange(change, data); + QQuickControl::itemChange(change, data); switch (change) { case ItemVisibleHasChanged: emit d->popup->visibleChanged(); @@ -1227,6 +1228,8 @@ void QQuickPopup::setParentItem(QQuickItem *parent) d->parentItem = parent; if (d->positioner.parentItem()) d->positioner.setParentItem(parent); + if (d->popupItem) + QQuickControlPrivate::updateFontRecur(d->popupItem, QQuickControlPrivate::naturalControlFont(parent)); emit parentChanged(); } } diff --git a/src/templates/qquickpopup_p_p.h b/src/templates/qquickpopup_p_p.h index 29faa94e..ab53a616 100644 --- a/src/templates/qquickpopup_p_p.h +++ b/src/templates/qquickpopup_p_p.h @@ -49,6 +49,7 @@ // #include "qquickpopup_p.h" +#include "qquickcontrol_p.h" #include <QtCore/private/qobject_p.h> #include <QtQuick/qquickitem.h> @@ -83,7 +84,7 @@ private: QQuickPopupPrivate *popup; }; -class QQuickPopupItem : public QQuickItem +class QQuickPopupItem : public QQuickControl { Q_OBJECT |