diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-01-03 10:38:33 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-06 10:40:08 +0100 |
commit | 39540124dd0900e0c99dcda8c0ebdf4f3cea8d5e (patch) | |
tree | 8fb7174b6523945101f7bd5177b973a745b357de /src/quick/items/qquickview_p.h | |
parent | e3232bce40ddefd3b4dfa57a923b15cb47f051bf (diff) |
Fix interaction of QQuickItems with the garbage collector
The QObject ownership of QQuickItem objects is not accessible / mutable
in QML, because the parent property maps to the (dynamic) visual parent.
There are use-cases of creating QQuickItem objects without a QObject parent and
to support this, the visual parent needs to mark its visual children in order
to provide intuitive semantics.
[ChangeLog][QtQuick][Import Behavior Changes] A QQuick Item is now strongly
referenced by its visual parent item, so it doesn't require a QObject parent to
stay alive.
Task-number: QTBUG-35913
Change-Id: Ief2d40ac76298a0cf241ca73ff654c4ecfa12748
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src/quick/items/qquickview_p.h')
-rw-r--r-- | src/quick/items/qquickview_p.h | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/quick/items/qquickview_p.h b/src/quick/items/qquickview_p.h index 170c93a6cf..e18b45dfbe 100644 --- a/src/quick/items/qquickview_p.h +++ b/src/quick/items/qquickview_p.h @@ -51,12 +51,17 @@ #include <QtCore/QWeakPointer> #include <QtQml/qqmlengine.h> +#include <private/qv4object_p.h> #include "qquickwindow_p.h" #include "qquickitemchangelistener_p.h" QT_BEGIN_NAMESPACE +namespace QV4 { +struct ExecutionEngine; +} + class QQmlContext; class QQmlError; class QQuickItem; @@ -94,6 +99,23 @@ public: QQuickView::ResizeMode resizeMode; QSize initialSize; QElapsedTimer frameTimer; + QV4::PersistentValue rootItemMarker; +}; + +struct QQuickRootItemMarker : public QV4::Object +{ + Q_MANAGED + + QQuickRootItemMarker(QQuickViewPrivate *view); + + static void destroy(Managed *that) + { + static_cast<QQuickRootItemMarker*>(that)->~QQuickRootItemMarker(); + } + + static void markObjects(Managed *that, QV4::ExecutionEngine *e); + + QQuickViewPrivate *view; }; QT_END_NAMESPACE |