aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/designer
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-05-24 11:08:09 +0200
committerLaszlo Agocs <laszlo.agocs@theqtcompany.com>2016-05-24 11:33:42 +0200
commit9ff09fb283cd130fb717769b44f54bfbb28efd8a (patch)
tree711f70b4b494bd996d54bdab5c44f3c89b37a6d1 /src/quick/designer
parent592b5b49b6c0043fae5db7721689813ebd226032 (diff)
parentec2b2a5f5d804095b6b2b8575b1cd1b75a8335ff (diff)
Merge remote-tracking branch 'origin/dev' into wip/scenegraphng
Conflicts: src/quick/items/qquickopenglshadereffectnode.cpp src/quick/items/qquickshadereffect.cpp src/quick/scenegraph/coreapi/qsgbatchrenderer_p.h src/quick/scenegraph/qsgdefaultglyphnode_p.h Change-Id: I3d6874b4e4231a89d2836c04fe8e7f2ef2d698c4
Diffstat (limited to 'src/quick/designer')
-rw-r--r--src/quick/designer/qqmldesignermetaobject.cpp48
-rw-r--r--src/quick/designer/qqmldesignermetaobject_p.h2
-rw-r--r--src/quick/designer/qquickdesignersupport.cpp20
3 files changed, 31 insertions, 39 deletions
diff --git a/src/quick/designer/qqmldesignermetaobject.cpp b/src/quick/designer/qqmldesignermetaobject.cpp
index 46808f978b..63b4102b10 100644
--- a/src/quick/designer/qqmldesignermetaobject.cpp
+++ b/src/quick/designer/qqmldesignermetaobject.cpp
@@ -79,23 +79,9 @@ struct MetaPropertyData {
QVector<QPair<QVariant, bool> > m_data;
};
-static bool constructedMetaData(const QQmlVMEMetaData* data)
-{
- return data->propertyCount == 0
- && data->aliasCount == 0
- && data->signalCount == 0
- && data->methodCount == 0;
-}
-
static QQmlVMEMetaData* fakeMetaData()
{
- QQmlVMEMetaData* data = new QQmlVMEMetaData;
- data->propertyCount = 0;
- data->aliasCount = 0;
- data->signalCount = 0;
- data->methodCount = 0;
-
- return data;
+ return new QQmlVMEMetaData;
}
static const QQmlVMEMetaData* vMEMetaDataForObject(QObject *object)
@@ -125,7 +111,15 @@ QQmlDesignerMetaObject* QQmlDesignerMetaObject::getNodeInstanceMetaObject(QObjec
return static_cast<QQmlDesignerMetaObject *>(parent);
// we just create one and the ownership goes automatically to the object in nodeinstance see init method
- return new QQmlDesignerMetaObject(object, engine);
+
+ QQmlData *ddata = QQmlData::get(object, false);
+
+ const bool hadVMEMetaObject = ddata ? ddata->hasVMEMetaObject : false;
+ QQmlDesignerMetaObject *mo = new QQmlDesignerMetaObject(object, engine);
+ //If our parent is not a VMEMetaObject we just set the flag to false again
+ if (ddata)
+ ddata->hasVMEMetaObject = hadVMEMetaObject;
+ return mo;
}
void QQmlDesignerMetaObject::init(QObject *object, QQmlEngine *engine)
@@ -140,20 +134,20 @@ void QQmlDesignerMetaObject::init(QObject *object, QQmlEngine *engine)
QObjectPrivate *op = QObjectPrivate::get(object);
op->metaObject = this;
- //create cache
- cache = m_cache = QQmlEnginePrivate::get(engine)->cache(this);
- cache->addref();
+ m_cache = QQmlEnginePrivate::get(engine)->cache(this);
- //If our parent is not a VMEMetaObject we just se the flag to false again
- if (constructedMetaData(metaData))
- QQmlData::get(object)->hasVMEMetaObject = false;
+ if (m_cache != cache) {
+ m_cache->addref();
+ cache->release();
+ cache = m_cache;
+ }
nodeInstanceMetaObjectList.insert(this, true);
hasAssignedMetaObjectData = true;
}
QQmlDesignerMetaObject::QQmlDesignerMetaObject(QObject *object, QQmlEngine *engine)
- : QQmlVMEMetaObject(object, cacheForObject(object, engine), vMEMetaDataForObject(object)),
+ : QQmlVMEMetaObject(object, cacheForObject(object, engine), vMEMetaDataForObject(object), /*qml compilation unit*/nullptr, /*qmlObjectId*/-1),
m_context(engine->contextForObject(object)),
m_data(new MetaPropertyData),
m_cache(0)
@@ -161,22 +155,20 @@ QQmlDesignerMetaObject::QQmlDesignerMetaObject(QObject *object, QQmlEngine *engi
init(object, engine);
QQmlData *ddata = QQmlData::get(object, false);
-
//Assign cache to object
if (ddata && ddata->propertyCache) {
cache->setParent(ddata->propertyCache);
cache->invalidate(engine, this);
+ ddata->propertyCache->release();
ddata->propertyCache = m_cache;
+ m_cache->addref();
}
}
QQmlDesignerMetaObject::~QQmlDesignerMetaObject()
{
- if (cache->count() > 1) // qml is crashing because the property cache is not removed from the engine
- cache->release();
- else
- m_type->release();
+ m_type->release();
nodeInstanceMetaObjectList.remove(this);
}
diff --git a/src/quick/designer/qqmldesignermetaobject_p.h b/src/quick/designer/qqmldesignermetaobject_p.h
index c45f83dc1e..a5402ccbc4 100644
--- a/src/quick/designer/qqmldesignermetaobject_p.h
+++ b/src/quick/designer/qqmldesignermetaobject_p.h
@@ -70,7 +70,6 @@ public:
static void registerNotifyPropertyChangeCallBack(void (*callback)(QObject*, const QQuickDesignerSupport::PropertyName &propertyName));
protected:
- QQmlDesignerMetaObject(QObject *object, QQmlEngine *engine);
static QQmlDesignerMetaObject* getNodeInstanceMetaObject(QObject *object, QQmlEngine *engine);
void createNewDynamicProperty(const QString &name);
@@ -95,6 +94,7 @@ protected:
void copyTypeMetaObject();
private:
+ QQmlDesignerMetaObject(QObject *object, QQmlEngine *engine);
void init(QObject *, QQmlEngine *engine);
QPointer<QQmlContext> m_context;
diff --git a/src/quick/designer/qquickdesignersupport.cpp b/src/quick/designer/qquickdesignersupport.cpp
index ec00eed18a..f063cd3a81 100644
--- a/src/quick/designer/qquickdesignersupport.cpp
+++ b/src/quick/designer/qquickdesignersupport.cpp
@@ -189,17 +189,17 @@ QTransform QQuickDesignerSupport::parentTransform(QQuickItem *referencedItem)
return parentTransform;
}
-QString propertyNameForAnchorLine(const QQuickAnchorLine::AnchorLine &anchorLine)
+QString propertyNameForAnchorLine(const QQuickAnchors::Anchor &anchorLine)
{
switch (anchorLine) {
- case QQuickAnchorLine::Left: return QLatin1String("left");
- case QQuickAnchorLine::Right: return QLatin1String("right");
- case QQuickAnchorLine::Top: return QLatin1String("top");
- case QQuickAnchorLine::Bottom: return QLatin1String("bottom");
- case QQuickAnchorLine::HCenter: return QLatin1String("horizontalCenter");
- case QQuickAnchorLine::VCenter: return QLatin1String("verticalCenter");
- case QQuickAnchorLine::Baseline: return QLatin1String("baseline");
- case QQuickAnchorLine::Invalid:
+ case QQuickAnchors::LeftAnchor: return QLatin1String("left");
+ case QQuickAnchors::RightAnchor: return QLatin1String("right");
+ case QQuickAnchors::TopAnchor: return QLatin1String("top");
+ case QQuickAnchors::BottomAnchor: return QLatin1String("bottom");
+ case QQuickAnchors::HCenterAnchor: return QLatin1String("horizontalCenter");
+ case QQuickAnchors::VCenterAnchor: return QLatin1String("verticalCenter");
+ case QQuickAnchors::BaselineAnchor: return QLatin1String("baseline");
+ case QQuickAnchors::InvalidAnchor: // fallthrough:
default: return QString();
}
}
@@ -345,7 +345,7 @@ QPair<QString, QObject*> QQuickDesignerSupport::anchorLineTarget(QQuickItem *ite
return QPair<QString, QObject*>();
QQuickAnchorLine anchorLine = metaProperty.read().value<QQuickAnchorLine>();
- if (anchorLine.anchorLine != QQuickAnchorLine::Invalid) {
+ if (anchorLine.anchorLine != QQuickAnchors::InvalidAnchor) {
targetObject = anchorLine.item;
targetName = propertyNameForAnchorLine(anchorLine.anchorLine);
}