diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-01-15 11:34:30 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2016-01-15 14:51:56 +0000 |
commit | 07e0dec2b92eea069021b6efcb984dbacba9b48e (patch) | |
tree | e66d43d24df8682b639da1f8bb2cd8e7bfac6716 /src/controls | |
parent | fbb1fdec65435f7f013b11aa8d1efd35747fd8ee (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.cpp | 49 |
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); } |