aboutsummaryrefslogtreecommitdiffstats
path: root/src/controls/qquickstyle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/controls/qquickstyle.cpp')
-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);
}