aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/qml/qqmlproperty.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/qml/qqmlproperty.cpp')
-rw-r--r--src/qml/qml/qqmlproperty.cpp26
1 files changed, 15 insertions, 11 deletions
diff --git a/src/qml/qml/qqmlproperty.cpp b/src/qml/qml/qqmlproperty.cpp
index cfdcc9ea60..18e2c417ff 100644
--- a/src/qml/qml/qqmlproperty.cpp
+++ b/src/qml/qml/qqmlproperty.cpp
@@ -1271,29 +1271,31 @@ static void removeValuePropertyBinding(
template<typename Op>
bool changePropertyAndWriteBack(
QObject *object, int coreIndex, QQmlGadgetPtrWrapper *wrapper,
- QQmlPropertyData::WriteFlags flags, Op op)
+ QQmlPropertyData::WriteFlags flags, int internalIndex, Op op)
{
wrapper->read(object, coreIndex);
const bool rv = op(wrapper);
- wrapper->write(object, coreIndex, flags);
+ wrapper->write(object, coreIndex, flags, internalIndex);
return rv;
}
template<typename Op>
bool changeThroughGadgetPtrWrapper(
- QObject *object, const QQmlPropertyData &core,
- const QQmlRefPointer<QQmlContextData> &context, QQmlPropertyData::WriteFlags flags,
- Op op)
+ QObject *object, const QQmlPropertyData &core,
+ const QQmlRefPointer<QQmlContextData> &context, QQmlPropertyData::WriteFlags flags,
+ int internalIndex, Op op)
{
if (QQmlGadgetPtrWrapper *wrapper = context
? QQmlGadgetPtrWrapper::instance(context->engine(), core.propType())
: nullptr) {
- return changePropertyAndWriteBack(object, core.coreIndex(), wrapper, flags, op);
+ return changePropertyAndWriteBack(
+ object, core.coreIndex(), wrapper, flags, internalIndex, op);
}
if (QQmlValueType *valueType = QQmlMetaType::valueType(core.propType())) {
QQmlGadgetPtrWrapper wrapper(valueType, nullptr);
- return changePropertyAndWriteBack(object, core.coreIndex(), &wrapper, flags, op);
+ return changePropertyAndWriteBack(
+ object, core.coreIndex(), &wrapper, flags, internalIndex, op);
}
return false;
@@ -1309,8 +1311,9 @@ bool QQmlPropertyPrivate::writeValueProperty(
if (!valueTypeData.isValid())
return write(object, core, value, context, flags);
- return changeThroughGadgetPtrWrapper(object, core, context, flags,
- [&](QQmlGadgetPtrWrapper *wrapper) {
+ return changeThroughGadgetPtrWrapper(
+ object, core, context, flags | QQmlPropertyData::HasInternalIndex,
+ valueTypeData.coreIndex(), [&](QQmlGadgetPtrWrapper *wrapper) {
return write(wrapper, valueTypeData, value, context, flags);
});
}
@@ -1324,8 +1327,9 @@ bool QQmlPropertyPrivate::resetValueProperty(
if (!valueTypeData.isValid())
return reset(object, core, flags);
- return changeThroughGadgetPtrWrapper(object, core, context, flags,
- [&](QQmlGadgetPtrWrapper *wrapper) {
+ return changeThroughGadgetPtrWrapper(
+ object, core, context, flags | QQmlPropertyData::HasInternalIndex,
+ valueTypeData.coreIndex(), [&](QQmlGadgetPtrWrapper *wrapper) {
return reset(wrapper, valueTypeData, flags);
});
}