diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2009-09-28 00:38:30 (GMT) |
---|---|---|
committer | Michael Brasser <michael.brasser@nokia.com> | 2009-10-11 22:47:47 (GMT) |
commit | ac507b4752dcd065038130d224910a6dc64f8f37 (patch) | |
tree | 629acc0c7b4afd4b474d66b27bf8b6ca161c85c0 /src/declarative/qml/qmlvmemetaobject.cpp | |
parent | 9b7d77460c38ec93d98fa4779826b32bea2eaaff (diff) | |
download | Qt-ac507b4752dcd065038130d224910a6dc64f8f37.zip Qt-ac507b4752dcd065038130d224910a6dc64f8f37.tar.gz Qt-ac507b4752dcd065038130d224910a6dc64f8f37.tar.bz2 |
Improve Behavior reliability.
Diffstat (limited to 'src/declarative/qml/qmlvmemetaobject.cpp')
-rw-r--r-- | src/declarative/qml/qmlvmemetaobject.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/declarative/qml/qmlvmemetaobject.cpp b/src/declarative/qml/qmlvmemetaobject.cpp index f473743..5ef1158 100644 --- a/src/declarative/qml/qmlvmemetaobject.cpp +++ b/src/declarative/qml/qmlvmemetaobject.cpp @@ -100,6 +100,24 @@ QmlVMEMetaObject::~QmlVMEMetaObject() int QmlVMEMetaObject::metaCall(QMetaObject::Call c, int _id, void **a) { int id = _id; + if(c == QMetaObject::WriteProperty) { + int flags = *reinterpret_cast<int*>(a[3]); + if (!(flags & QmlMetaProperty::BypassInterceptor) + && !aInterceptors.isEmpty() + && aInterceptors.testBit(id)) { + QmlPropertyValueInterceptor *vi = interceptors.value(id); + if (id >= propOffset) { + id -= propOffset; + if (id < metaData->propertyCount) { + vi->write(QVariant(data[id].type(), a[0])); + return -1; + } + } else { + vi->write(QVariant(property(id).type(), a[0])); + return -1; + } + } + } if(c == QMetaObject::ReadProperty || c == QMetaObject::WriteProperty) { if (id >= propOffset) { id -= propOffset; @@ -253,4 +271,13 @@ void QmlVMEMetaObject::listChanged(int id) activate(object, methodOffset + id, 0); } +void QmlVMEMetaObject::registerInterceptor(int index, QmlPropertyValueInterceptor *interceptor) +{ + if (aInterceptors.isEmpty()) + aInterceptors.resize(propertyCount() + metaData->propertyCount); + aInterceptors.setBit(index); + interceptors.insert(index, interceptor); +} + + QT_END_NAMESPACE |