diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-12-13 17:03:37 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-12-13 16:36:19 +0000 |
commit | 1c265b23ef7494abc6a00094e781a8e48de87121 (patch) | |
tree | ab84ff7c137045436e19fa808d8cbb5f0f22f816 /src | |
parent | 59f72376602c306f6322c9482e2201f1cc9e3819 (diff) |
ApplicationWindow: use deferred execution
Task-number: QTBUG-50992
Change-Id: Ia07055d2fa3d30c91bdf3c526cf7301c7ed1ce2b
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickapplicationwindow.cpp | 30 | ||||
-rw-r--r-- | src/quicktemplates2/qquickapplicationwindow_p.h | 1 |
2 files changed, 27 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickapplicationwindow.cpp b/src/quicktemplates2/qquickapplicationwindow.cpp index e3f16d55..c1a7f301 100644 --- a/src/quicktemplates2/qquickapplicationwindow.cpp +++ b/src/quicktemplates2/qquickapplicationwindow.cpp @@ -43,6 +43,8 @@ #include "qquicktoolbar_p.h" #include "qquicktabbar_p.h" #include "qquickdialogbuttonbox_p.h" +#include "qquickdeferredexecute_p_p.h" +#include "qquickdeferredpointer_p_p.h" #include <QtCore/private/qobject_p.h> #include <QtQuick/private/qquickitem_p.h> @@ -173,8 +175,10 @@ public: static void contentData_append(QQmlListProperty<QObject> *prop, QObject *obj); + void executeBackground(bool complete = false); + bool complete; - QQuickItem *background; + QQuickDeferredPointer<QQuickItem> background; QQuickItem *contentItem; QQuickItem *header; QQuickItem *footer; @@ -295,6 +299,20 @@ void QQuickApplicationWindowPrivate::contentData_append(QQmlListProperty<QObject QQuickPopupPrivate::get(popup)->setWindow(static_cast<QQuickApplicationWindow *>(prop->data)); } +static inline QString backgroundName() { return QStringLiteral("background"); } + +void QQuickApplicationWindowPrivate::executeBackground(bool complete) +{ + Q_Q(QQuickApplicationWindow); + if (background.wasExecuted()) + return; + + if (!background) + quickBeginDeferred(q, backgroundName(), background); + if (complete) + quickCompleteDeferred(q, backgroundName(), background); +} + QQuickApplicationWindow::QQuickApplicationWindow(QWindow *parent) : QQuickWindowQmlImpl(parent), d_ptr(new QQuickApplicationWindowPrivate) { @@ -336,7 +354,9 @@ QQuickApplicationWindow::~QQuickApplicationWindow() */ QQuickItem *QQuickApplicationWindow::background() const { - Q_D(const QQuickApplicationWindow); + QQuickApplicationWindowPrivate *d = const_cast<QQuickApplicationWindowPrivate *>(d_func()); + if (!d->background) + d->executeBackground(); return d->background; } @@ -346,7 +366,7 @@ void QQuickApplicationWindow::setBackground(QQuickItem *background) if (d->background == background) return; - QQuickControlPrivate::destroyDelegate(d->background, this); + delete d->background; d->background = background; if (background) { background->setParentItem(QQuickWindow::contentItem()); @@ -355,7 +375,8 @@ void QQuickApplicationWindow::setBackground(QQuickItem *background) if (isComponentComplete()) d->relayout(); } - emit backgroundChanged(); + if (!d->background.isExecuting()) + emit backgroundChanged(); } /*! @@ -716,6 +737,7 @@ void QQuickApplicationWindow::componentComplete() { Q_D(QQuickApplicationWindow); d->complete = true; + d->executeBackground(true); QQuickWindowQmlImpl::componentComplete(); } diff --git a/src/quicktemplates2/qquickapplicationwindow_p.h b/src/quicktemplates2/qquickapplicationwindow_p.h index 07ddc67e..c1e7935b 100644 --- a/src/quicktemplates2/qquickapplicationwindow_p.h +++ b/src/quicktemplates2/qquickapplicationwindow_p.h @@ -72,6 +72,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickApplicationWindow : public QQuickWi Q_PROPERTY(QQuickOverlay *overlay READ overlay CONSTANT FINAL) Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL) Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL) + Q_CLASSINFO("DeferredPropertyNames", "background") Q_CLASSINFO("DefaultProperty", "contentData") public: |