aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-05-14 09:33:55 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-05-18 09:25:57 +0000
commitb6ecb5a4d14663dc00d8179f590e86bfd52c6881 (patch)
tree36a7e931d17e155af02eadd70f93adfa9fee7abe /src
parentca87ab8c9b42e329d5db61deb4736ad5e628fffe (diff)
Fix style inheritance with dynamically changing windows
It can happen that the parent item changes before an item gets associated with a window. Change-Id: I4cb65a06d363f8211b202e559c76793c71ba318a Reviewed-by: Nikita Krupenko <krnekit@gmail.com> Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quickcontrols2/qquickstyleattached.cpp17
-rw-r--r--src/quickcontrols2/qquickstyleattached_p.h2
2 files changed, 17 insertions, 2 deletions
diff --git a/src/quickcontrols2/qquickstyleattached.cpp b/src/quickcontrols2/qquickstyleattached.cpp
index 8b035455..d0df79c5 100644
--- a/src/quickcontrols2/qquickstyleattached.cpp
+++ b/src/quickcontrols2/qquickstyleattached.cpp
@@ -39,6 +39,7 @@
#include <QtCore/qfile.h>
#include <QtCore/qsettings.h>
#include <QtCore/qfileselector.h>
+#include <QtQuick/qquickwindow.h>
#include <QtQuick/private/qquickitem_p.h>
#include <QtQuickTemplates2/private/qquickpopup_p.h>
@@ -154,15 +155,19 @@ QQuickStyleAttached::QQuickStyleAttached(QObject *parent) : QObject(parent)
item = popup->popupItem();
}
- if (item)
+ if (item) {
+ connect(item, &QQuickItem::windowChanged, this, &QQuickStyleAttached::itemWindowChanged);
QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Parent);
+ }
}
QQuickStyleAttached::~QQuickStyleAttached()
{
QQuickItem *item = qobject_cast<QQuickItem *>(parent());
- if (item)
+ if (item) {
+ disconnect(item, &QQuickItem::windowChanged, this, &QQuickStyleAttached::itemWindowChanged);
QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Parent);
+ }
setParentStyle(nullptr);
}
@@ -222,6 +227,14 @@ void QQuickStyleAttached::parentStyleChange(QQuickStyleAttached *newParent, QQui
Q_UNUSED(oldParent);
}
+void QQuickStyleAttached::itemWindowChanged(QQuickWindow *window)
+{
+ Q_UNUSED(window);
+ QQuickItem *item = qobject_cast<QQuickItem *>(sender());
+ if (item)
+ setParentStyle(findParentStyle(metaObject(), item));
+}
+
void QQuickStyleAttached::itemParentChanged(QQuickItem *item, QQuickItem *parent)
{
Q_UNUSED(parent);
diff --git a/src/quickcontrols2/qquickstyleattached_p.h b/src/quickcontrols2/qquickstyleattached_p.h
index 67938290..13b816f2 100644
--- a/src/quickcontrols2/qquickstyleattached_p.h
+++ b/src/quickcontrols2/qquickstyleattached_p.h
@@ -59,6 +59,7 @@
QT_BEGIN_NAMESPACE
class QSettings;
+class QQuickWindow;
class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickStyleAttached : public QObject, public QQuickItemChangeListener
{
@@ -80,6 +81,7 @@ protected:
virtual void parentStyleChange(QQuickStyleAttached *newParent, QQuickStyleAttached *oldParent);
+ void itemWindowChanged(QQuickWindow *window);
void itemParentChanged(QQuickItem *item, QQuickItem *parent) override;
private: