diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-06-17 05:44:46 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-06-17 05:44:46 (GMT) |
commit | 00d6d725ed0c3eb7d2bc0d0187e66c0ee55ef4a7 (patch) | |
tree | b181266d01eacefce6ab2aeb10fc17a4553b1ed5 /src/declarative/qml | |
parent | 4b29e52cad8d719d382110349e29c127db45036a (diff) | |
download | Qt-00d6d725ed0c3eb7d2bc0d0187e66c0ee55ef4a7.zip Qt-00d6d725ed0c3eb7d2bc0d0187e66c0ee55ef4a7.tar.gz Qt-00d6d725ed0c3eb7d2bc0d0187e66c0ee55ef4a7.tar.bz2 |
Don't defer properties if an id has been set
Diffstat (limited to 'src/declarative/qml')
-rw-r--r-- | src/declarative/qml/qmlcompiler.cpp | 12 | ||||
-rw-r--r-- | src/declarative/qml/qmlvme.cpp | 16 |
2 files changed, 17 insertions, 11 deletions
diff --git a/src/declarative/qml/qmlcompiler.cpp b/src/declarative/qml/qmlcompiler.cpp index 5b81721..8297ac4 100644 --- a/src/declarative/qml/qmlcompiler.cpp +++ b/src/declarative/qml/qmlcompiler.cpp @@ -687,20 +687,24 @@ bool QmlCompiler::compileObject(Object *obj, const BindingContext &ctxt) output->indexForByteArray(customData); } - // Build the deferred block (### Need to check for presence of "id") + // Build the deferred block if (!deferredProps.isEmpty()) { QmlInstruction defer; defer.type = QmlInstruction::Defer; defer.line = 0; + defer.defer.deferCount = 0; int deferIdx = output->bytecode.count(); output->bytecode << defer; + // ### This is lame, we should check if individual properties have + // ids defined within them + int idCount = compileState.ids.count(); foreach (Property *prop, deferredProps) { COMPILE_CHECK(compileProperty(prop, obj, objCtxt)); } - - output->bytecode[deferIdx].defer.deferCount = - output->bytecode.count() - deferIdx - 1; + if (idCount == compileState.ids.count()) + output->bytecode[deferIdx].defer.deferCount = + output->bytecode.count() - deferIdx - 1; } // If the type support the QmlParserStatusInterface we need to invoke diff --git a/src/declarative/qml/qmlvme.cpp b/src/declarative/qml/qmlvme.cpp index be09190..a3ee4e5 100644 --- a/src/declarative/qml/qmlvme.cpp +++ b/src/declarative/qml/qmlvme.cpp @@ -778,13 +778,15 @@ QObject *QmlVME::run(QStack<QObject *> &stack, QmlContext *ctxt, QmlCompiledComp case QmlInstruction::Defer: { - QObject *target = stack.top(); - QmlInstanceDeclarativeData *data = - QmlInstanceDeclarativeData::get(target, true); - comp->addref(); - data->deferredComponent = comp; - data->deferredIdx = ii; - ii += instr.defer.deferCount; + if (instr.defer.deferCount) { + QObject *target = stack.top(); + QmlInstanceDeclarativeData *data = + QmlInstanceDeclarativeData::get(target, true); + comp->addref(); + data->deferredComponent = comp; + data->deferredIdx = ii; + ii += instr.defer.deferCount; + } } break; |