diff options
-rw-r--r-- | src/controls/qquickstyle.cpp | 44 | ||||
-rw-r--r-- | src/controls/qquickstyle_p.h | 2 | ||||
-rw-r--r-- | src/imports/controls/material/ComboBox.qml | 4 | ||||
-rw-r--r-- | src/imports/controls/universal/ComboBox.qml | 3 | ||||
-rw-r--r-- | tests/auto/material/data/tst_material.qml | 4 | ||||
-rw-r--r-- | tests/auto/universal/data/tst_universal.qml | 4 |
6 files changed, 44 insertions, 17 deletions
diff --git a/src/controls/qquickstyle.cpp b/src/controls/qquickstyle.cpp index 76524629..c38950d8 100644 --- a/src/controls/qquickstyle.cpp +++ b/src/controls/qquickstyle.cpp @@ -56,22 +56,29 @@ static QQuickStyle *findParentStyle(const QMetaObject *type, QObject *object) { QQuickItem *item = qobject_cast<QQuickItem *>(object); if (item) { - // lookup parent items + // lookup parent items and popups QQuickItem *parent = item->parentItem(); while (parent) { QQuickStyle *style = attachedStyle(type, parent); if (style) return style; + + QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent->parent()); + if (popup) + return attachedStyle(type, popup); + parent = parent->parentItem(); } // fallback to item's window - QQuickWindow *window = item->window(); - if (window) { - QQuickStyle *style = attachedStyle(type, window); - if (style) - return style; - } + QQuickStyle *style = attachedStyle(type, item->window()); + if (style) + return style; + } else { + // lookup popup's window + QQuickPopup *popup = qobject_cast<QQuickPopup *>(object); + if (popup) + return attachedStyle(type, popup->popupItem()->window()); } // lookup parent window @@ -138,14 +145,14 @@ static QList<QQuickStyle *> findChildStyles(const QMetaObject *type, QObject *ob QQuickStyle::QQuickStyle(QObject *parent) : QObject(parent) { - QQuickItem *item = qobject_cast<QQuickItem *>(parent); + QQuickItem *item = parentItem(); if (item) QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Parent); } QQuickStyle::~QQuickStyle() { - QQuickItem *item = qobject_cast<QQuickItem *>(parent()); + QQuickItem *item = parentItem(); if (item) QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Parent); @@ -167,6 +174,17 @@ QSharedPointer<QSettings> QQuickStyle::settings(const QString &group) return QSharedPointer<QSettings>(); } +QQuickItem *QQuickStyle::parentItem() const +{ + QQuickItem *item = qobject_cast<QQuickItem *>(parent()); + if (!item) { + QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent()); + if (popup) + item = popup->popupItem(); + } + return item; +} + QList<QQuickStyle *> QQuickStyle::childStyles() const { return m_childStyles; @@ -209,12 +227,8 @@ void QQuickStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle *oldPare void QQuickStyle::itemParentChanged(QQuickItem *item, QQuickItem *parent) { - QQuickStyle *style = attachedStyle(metaObject(), item); - if (style) { - QQuickStyle *parentStyle = findParentStyle(metaObject(), parent); - if (parentStyle) - style->setParentStyle(parentStyle); - } + Q_UNUSED(parent); + setParentStyle(findParentStyle(metaObject(), item)); } QT_END_NAMESPACE diff --git a/src/controls/qquickstyle_p.h b/src/controls/qquickstyle_p.h index 02ee667a..c5bfed0f 100644 --- a/src/controls/qquickstyle_p.h +++ b/src/controls/qquickstyle_p.h @@ -72,6 +72,8 @@ public: protected: void init(); + QQuickItem *parentItem() const; + QList<QQuickStyle *> childStyles() const; QQuickStyle *parentStyle() const; diff --git a/src/imports/controls/material/ComboBox.qml b/src/imports/controls/material/ComboBox.qml index 1c293567..97724585 100644 --- a/src/imports/controls/material/ComboBox.qml +++ b/src/imports/controls/material/ComboBox.qml @@ -121,6 +121,10 @@ T.ComboBox { topMargin: 12 bottomMargin: 12 + Material.theme: control.Material.theme + Material.accent: control.Material.accent + Material.primary: control.Material.primary + enter: Transition { // grow_fade_in NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 } diff --git a/src/imports/controls/universal/ComboBox.qml b/src/imports/controls/universal/ComboBox.qml index 03278e10..31a928a3 100644 --- a/src/imports/controls/universal/ComboBox.qml +++ b/src/imports/controls/universal/ComboBox.qml @@ -113,6 +113,9 @@ T.ComboBox { topMargin: 8 bottomMargin: 8 + Universal.theme: control.Universal.theme + Universal.accent: control.Universal.accent + contentItem: ListView { id: listview clip: true diff --git a/tests/auto/material/data/tst_material.qml b/tests/auto/material/data/tst_material.qml index 2636bec0..e8ee47ca 100644 --- a/tests/auto/material/data/tst_material.qml +++ b/tests/auto/material/data/tst_material.qml @@ -98,7 +98,7 @@ TestCase { Component { id: menu - Item { + ApplicationWindow { Material.primary: Material.Blue Material.accent: Material.Red property alias menu: popup @@ -281,6 +281,8 @@ TestCase { var container = menu.createObject(testCase) verify(container) verify(container.menu) + container.menu.open() + verify(container.menu.visible) var child = container.menu.itemAt(0) verify(child) compare(container.Material.theme, Material.Light) diff --git a/tests/auto/universal/data/tst_universal.qml b/tests/auto/universal/data/tst_universal.qml index c232e7c1..82c07b23 100644 --- a/tests/auto/universal/data/tst_universal.qml +++ b/tests/auto/universal/data/tst_universal.qml @@ -96,7 +96,7 @@ TestCase { Component { id: menu - Item { + ApplicationWindow { Universal.accent: Universal.Red property alias menu: popup Menu { @@ -256,6 +256,8 @@ TestCase { var container = menu.createObject(testCase) verify(container) verify(container.menu) + container.menu.open() + verify(container.menu.visible) var child = container.menu.itemAt(0) verify(child) compare(container.Universal.theme, Universal.Light) |