From b13def0486a083c48bae40dab2bac014b690f36d Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Mon, 19 Apr 2010 15:57:54 +1000 Subject: List properties for dynamic meta objects. Real solution is probably to fix/rewrite/dispose of QDeclarativeOpenMetaObject. Task-number: QTBUG-9420 Reviewed-by: Michael Brasser --- src/declarative/qml/qdeclarativeobjectscriptclass.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp index a27d19d..a194354 100644 --- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp +++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp @@ -463,12 +463,21 @@ QStringList QDeclarativeObjectScriptClass::propertyNames(Object *object) cache = ddata->propertyCache; if (!cache) { cache = enginePrivate->cache(obj); - if (cache && ddata) { cache->addref(); ddata->propertyCache = cache; } + if (cache) { + if (ddata) { cache->addref(); ddata->propertyCache = cache; } + } else { + // Not cachable - fall back to QMetaObject (eg. dynamic meta object) + // XXX QDeclarativeOpenMetaObject has a cache, so this is suboptimal. + // XXX This is a workaround for QTBUG-9420. + const QMetaObject *mo = obj->metaObject(); + QStringList r; + int pc = mo->propertyCount(); + int po = mo->propertyOffset(); + for (int i=po; iproperty(i).name()); + return r; + } } - - if (!cache) - return QStringList(); - return cache->propertyNames(); } -- cgit v0.12