diff options
Diffstat (limited to 'src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp')
| -rw-r--r-- | src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp | 25 | 
1 files changed, 18 insertions, 7 deletions
| diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 43cafe3..1038c83 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -44,6 +44,7 @@  #include "qdeclarativeitem.h"  #include <qdeclarativecontext.h> +#include <qdeclarativecontext_p.h>  #include <qdeclarativeengine.h>  #include <qdeclarativeexpression.h>  #include <qdeclarativepackage_p.h> @@ -55,6 +56,7 @@  #include <qdeclarativeguard_p.h>  #include <qdeclarativeglobal_p.h> +#include <qgraphicsscene.h>  #include <qlistmodelinterface_p.h>  #include <qhash.h>  #include <qlist.h> @@ -436,8 +438,7 @@ int QDeclarativeVisualDataModelDataMetaObject::createProperty(const char *name,      if ((!model->m_listModelInterface || !model->m_abstractItemModel) && model->m_listAccessor) {          if (model->m_listAccessor->type() == QDeclarativeListAccessor::ListProperty) {              model->ensureRoles(); -            QObject *object = model->m_listAccessor->at(data->m_index).value<QObject*>(); -            if (object && (object->property(name).isValid() || qstrcmp(name,"modelData")==0)) +            if (qstrcmp(name,"modelData") == 0)                  return QDeclarativeOpenMetaObject::createProperty(name, type);          }      } @@ -759,7 +760,7 @@ void QDeclarativeVisualDataModel::setModel(const QVariant &model)  }  /*! -    \qmlproperty component VisualDataModel::delegate +    \qmlproperty Component VisualDataModel::delegate      The delegate provides a template defining each item instantiated by a view.      The index is exposed as an accessible \c index property.  Properties of the @@ -963,13 +964,18 @@ QDeclarativeVisualDataModel::ReleaseFlags QDeclarativeVisualDataModel::release(Q      }      if (d->m_cache.releaseItem(obj)) { +        // Remove any bindings to avoid warnings due to parent change. +        QObjectPrivate *p = QObjectPrivate::get(obj); +        Q_ASSERT(p->declarativeData); +        QDeclarativeData *d = static_cast<QDeclarativeData*>(p->declarativeData); +        if (d->ownContext && d->context) +            d->context->clearExpressions(); +          if (inPackage) {              emit destroyingPackage(qobject_cast<QDeclarativePackage*>(obj));          } else { -            if (item->hasFocus()) -                item->clearFocus(); -            item->setOpacity(0.0); -            static_cast<QGraphicsItem*>(item)->setParentItem(0); +            if (item->scene()) +                item->scene()->removeItem(item);          }          stat |= Destroyed;          obj->deleteLater(); @@ -1030,6 +1036,11 @@ QDeclarativeItem *QDeclarativeVisualDataModel::item(int index, const QByteArray          if (!ccontext) ccontext = qmlContext(this);          QDeclarativeContext *ctxt = new QDeclarativeContext(ccontext);          QDeclarativeVisualDataModelData *data = new QDeclarativeVisualDataModelData(index, this); +        if ((!d->m_listModelInterface || !d->m_abstractItemModel) && d->m_listAccessor +            && d->m_listAccessor->type() == QDeclarativeListAccessor::ListProperty) { +            ctxt->setContextObject(d->m_listAccessor->at(index).value<QObject*>()); +            ctxt = new QDeclarativeContext(ctxt, ctxt); +        }          ctxt->setContextProperty(QLatin1String("model"), data);          ctxt->setContextObject(data);          d->m_completePending = false; | 
