aboutsummaryrefslogtreecommitdiffstats
path: root/src/controls
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-15 11:34:30 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-01-15 14:51:56 +0000
commit07e0dec2b92eea069021b6efcb984dbacba9b48e (patch)
treee66d43d24df8682b639da1f8bb2cd8e7bfac6716 /src/controls
parentfbb1fdec65435f7f013b11aa8d1efd35747fd8ee (diff)
Fix style inheritance
Change-Id: I46f4ea38d21f0f6a22bd247e02fe92a5b0d0d454 Task-number: QTBUG-50470 Reviewed-by: J-P Nurmi <jpnurmi@theqtcompany.com>
Diffstat (limited to 'src/controls')
-rw-r--r--src/controls/qquickstyle.cpp49
1 files changed, 29 insertions, 20 deletions
diff --git a/src/controls/qquickstyle.cpp b/src/controls/qquickstyle.cpp
index 58563954..7f788e95 100644
--- a/src/controls/qquickstyle.cpp
+++ b/src/controls/qquickstyle.cpp
@@ -63,33 +63,40 @@ static QQuickStyle *findParentStyle(const QMetaObject *type, QObject *parent)
if (style)
return style;
+ // lookup object parent (window/popup)
+ QObject *grandParent = parent->parent();
+ if (grandParent) {
+ QQuickStyle *style = findParentStyle(type, grandParent);
+ if (style)
+ return style;
+ }
+
QQuickItem *item = qobject_cast<QQuickItem *>(parent);
if (item) {
// lookup parent items
QQuickItem *parent = item->parentItem();
- if (parent)
- return findParentStyle(type, parent);
+ if (parent) {
+ QQuickStyle *style = findParentStyle(type, parent);
+ if (style)
+ return style;
+ }
// fallback to item's window
- return findParentStyle(type, item->window());
+ QQuickStyle *style = findParentStyle(type, item->window());
+ if (style)
+ return style;
}
- // lookup object parent (window/popup)
- if (parent->parent())
- return findParentStyle(type, parent->parent());
-
// fallback to engine (global)
- if (parent) {
- QQmlEngine *engine = qmlEngine(parent);
- if (engine) {
- QByteArray name = QByteArray("_q_") + type->className();
- QQuickStyle *style = engine->property(name).value<QQuickStyle*>();
- if (!style) {
- style = attachedStyle(type, engine, true);
- engine->setProperty(name, QVariant::fromValue(style));
- }
- return style;
+ QQmlEngine *engine = qmlEngine(parent);
+ if (engine) {
+ QByteArray name = QByteArray("_q_") + type->className();
+ QQuickStyle *style = engine->property(name).value<QQuickStyle*>();
+ if (!style) {
+ style = attachedStyle(type, engine, true);
+ engine->setProperty(name, QVariant::fromValue(style));
}
+ return style;
}
return Q_NULLPTR;
@@ -200,14 +207,16 @@ void QQuickStyle::setParentStyle(QQuickStyle *style)
void QQuickStyle::init()
{
- if (!parent())
+ QObject *parent = QObject::parent();
+ if (!parent)
return;
- QQuickStyle *parentStyle = findParentStyle(metaObject(), parent()->parent());
+ QQuickItem *parentItem = qobject_cast<QQuickItem *>(parent);
+ QQuickStyle *parentStyle = findParentStyle(metaObject(), parentItem ? parentItem->parentItem() : parent->parent());
if (parentStyle)
setParentStyle(parentStyle);
- QList<QQuickStyle *> children = findChildStyles(metaObject(), parent());
+ QList<QQuickStyle *> children = findChildStyles(metaObject(), parent);
foreach (QQuickStyle *child, children)
child->setParentStyle(this);
}