QmlPuppet: Adding keepBindingFromGettingDeleted to QmlPrivateGate

Change-Id: I51d0d29939b6fbd3fc309c092654f373abd8f179
Reviewed-by: Tim Jenssen <tim.jenssen@theqtcompany.com>
This commit is contained in:
Thomas Hartmann
2015-05-19 16:48:47 +02:00
committed by Thomas Hartmann
parent c6047e06e6
commit f3abe73956
5 changed files with 25 additions and 2 deletions

View File

@@ -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));

View File

@@ -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

View File

@@ -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<PropertyName, QVariant> m_resetValueHash;

View File

@@ -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();

View File

@@ -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);