aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2014-05-08 14:35:30 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-07-22 13:49:14 +0200
commite8746aeaecc4b1cfe312d8ed943ad74bd53f66e2 (patch)
treef4f391707da4054502b4826eedec5cc80bfe0a1c /src/quick
parent0732e0177e62590c812f0fea9c32f7d427bd933f (diff)
Start implement new Object creation pattern
Create objects through a static create() method that returns a pointer to the objects Data. This will later on simplify breaking the direct connection between Object and Object::Data. Change-Id: Id8daa3c766429bc36f432868e1957846147c96b6 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src/quick')
-rw-r--r--src/quick/items/qquickview.cpp9
-rw-r--r--src/quick/items/qquickview_p.h14
-rw-r--r--src/quick/items/qquickwindowmodule.cpp2
3 files changed, 13 insertions, 12 deletions
diff --git a/src/quick/items/qquickview.cpp b/src/quick/items/qquickview.cpp
index 1a5058f4ca..5e26cbeeb5 100644
--- a/src/quick/items/qquickview.cpp
+++ b/src/quick/items/qquickview.cpp
@@ -58,11 +58,10 @@ QT_BEGIN_NAMESPACE
DEFINE_OBJECT_VTABLE(QQuickRootItemMarker);
-QQuickRootItemMarker::QQuickRootItemMarker(QQmlEngine *engine, QQuickWindow *window)
- : QV4::Object(QQmlEnginePrivate::getV4Engine(engine))
+QQuickRootItemMarker::Data *QQuickRootItemMarker::create(QQmlEngine *engine, QQuickWindow *window)
{
- d()->window = window;
- setVTable(staticVTable());
+ QV4::ExecutionEngine *e = QQmlEnginePrivate::getV4Engine(engine);
+ return new (e) Data(e, window);
}
void QQuickRootItemMarker::markObjects(QV4::Managed *that, QV4::ExecutionEngine *e)
@@ -91,7 +90,7 @@ void QQuickViewPrivate::init(QQmlEngine* e)
{
QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(engine.data());
QV4::Scope scope(v4);
- QV4::Scoped<QQuickRootItemMarker> v(scope, new (v4->memoryManager) QQuickRootItemMarker(engine.data(), q));
+ QV4::Scoped<QQuickRootItemMarker> v(scope, QQuickRootItemMarker::create(engine.data(), q));
rootItemMarker = v;
}
diff --git a/src/quick/items/qquickview_p.h b/src/quick/items/qquickview_p.h
index e73d5aab9c..8b35500de9 100644
--- a/src/quick/items/qquickview_p.h
+++ b/src/quick/items/qquickview_p.h
@@ -105,6 +105,13 @@ public:
struct QQuickRootItemMarker : public QV4::Object
{
struct Data : QV4::Object::Data {
+ Data(QV4::ExecutionEngine *engine, QQuickWindow *window)
+ : Object::Data(engine)
+ , window(window)
+ {
+ setVTable(staticVTable());
+ }
+
QQuickWindow *window;
};
struct {
@@ -113,12 +120,7 @@ struct QQuickRootItemMarker : public QV4::Object
V4_OBJECT
- QQuickRootItemMarker(QQmlEngine *engine, QQuickWindow *window);
-
- static void destroy(Managed *that)
- {
- static_cast<QQuickRootItemMarker*>(that)->~QQuickRootItemMarker();
- }
+ static Data *create(QQmlEngine *engine, QQuickWindow *window);
static void markObjects(Managed *that, QV4::ExecutionEngine *e);
diff --git a/src/quick/items/qquickwindowmodule.cpp b/src/quick/items/qquickwindowmodule.cpp
index 91388ea30f..51053ea801 100644
--- a/src/quick/items/qquickwindowmodule.cpp
+++ b/src/quick/items/qquickwindowmodule.cpp
@@ -102,7 +102,7 @@ protected:
{
QV4::ExecutionEngine *v4 = QQmlEnginePrivate::getV4Engine(e);
QV4::Scope scope(v4);
- QV4::ScopedObject v(scope, new (v4->memoryManager) QQuickRootItemMarker(e, this));
+ QV4::ScopedObject v(scope, QQuickRootItemMarker::create(e, this));
rootItemMarker = v;
}
}