From f3abe73956b130e5e82e9eab2d32e3f14704f22a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 19 May 2015 16:48:47 +0200 Subject: [PATCH] QmlPuppet: Adding keepBindingFromGettingDeleted to QmlPrivateGate Change-Id: I51d0d29939b6fbd3fc309c092654f373abd8f179 Reviewed-by: Tim Jenssen --- .../qml2puppet/instances/objectnodeinstance.cpp | 4 ++-- .../qmlprivategate/designercustomobjectdata.cpp | 15 +++++++++++++++ .../qmlprivategate/designercustomobjectdata.h | 2 ++ .../qmlpuppet/qmlprivategate/qmlprivategate.cpp | 5 +++++ .../qml/qmlpuppet/qmlprivategate/qmlprivategate.h | 1 + 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp index b9498b28309..ce10540dbf6 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/objectnodeinstance.cpp @@ -425,8 +425,8 @@ void ObjectNodeInstance::setPropertyVariant(const PropertyName &name, const QVar nodeInstanceServer()->removeFilePropertyFromFileSystemWatcher(object(), name, path); } - if (hasValidResetBinding(name)) { //#### - QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor | QQmlPropertyPrivate::DontRemoveBinding); + if (hasValidResetBinding(name)) { + QmlPrivateGate::keepBindingFromGettingDeleted(object(), context(), name); } bool isWritten = property.write(convertSpecialCharacter(adjustedValue)); diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp index c35ca6677fb..4c427cfd966 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.cpp @@ -113,6 +113,14 @@ void DesignerCustomObjectData::setPropertyBinding(QObject *object, QQmlContext * data->setPropertyBinding(context, propertyName, expression); } +void DesignerCustomObjectData::keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName) +{ + DesignerCustomObjectData* data = get(object); + + if (data) + data->keepBindingFromGettingDeleted(context, propertyName); +} + void DesignerCustomObjectData::populateResetHashes() { PropertyNameList propertyNameList = QmlPrivateGate::propertyNameListForWritableProperties(object()); @@ -245,6 +253,13 @@ void DesignerCustomObjectData::setPropertyBinding(QQmlContext *context, const Pr } } +void DesignerCustomObjectData::keepBindingFromGettingDeleted(QQmlContext *context, const PropertyName &propertyName) +{ + QQmlProperty property(object(), propertyName, context); + QQmlPropertyPrivate::setBinding(property, 0, QQmlPropertyPrivate::BypassInterceptor + | QQmlPropertyPrivate::DontRemoveBinding); +} + } // namespace QmlPrivateGate } // namespace Internal diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h index b930c912009..958f473843f 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/designercustomobjectdata.h @@ -58,6 +58,7 @@ public: static bool hasValidResetBinding(QObject *object, const PropertyName &propertyName); static bool hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged); static void setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression); + static void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName); private: DesignerCustomObjectData(QObject *object); @@ -69,6 +70,7 @@ private: QQmlAbstractBinding *getResetBinding(const PropertyName &propertyName) const; bool hasBindingForProperty(QQmlContext *context, const PropertyName &propertyName, bool *hasChanged) const; void setPropertyBinding(QQmlContext *context, const PropertyName &propertyName, const QString &expression); + void keepBindingFromGettingDeleted(QQmlContext *context, const PropertyName &propertyName); QObject *m_object; QHash m_resetValueHash; diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp index bb97d35e00e..d9b5d213cc7 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.cpp @@ -510,6 +510,11 @@ void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInsta } } +void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName) +{ + DesignerCustomObjectData::keepBindingFromGettingDeleted(object, context, propertyName); +} + ComponentCompleteDisabler::ComponentCompleteDisabler() { DesignerSupport::disableComponentComplete(); diff --git a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h index 817e1a19f97..7b1dd36e7ac 100644 --- a/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h +++ b/share/qtcreator/qml/qmlpuppet/qmlprivategate/qmlprivategate.h @@ -88,6 +88,7 @@ public: bool hasValidResetBinding(QObject *object, const PropertyName &propertyName); bool hasBindingForProperty(QObject *object, QQmlContext *context, const PropertyName &propertyName, bool *hasChanged); void setPropertyBinding(QObject *object, QQmlContext *context, const PropertyName &propertyName, const QString &expression); + void keepBindingFromGettingDeleted(QObject *object, QQmlContext *context, const PropertyName &propertyName); void doComponentCompleteRecursive(QObject *object, NodeInstanceServer *nodeInstanceServer);