diff options
author | Lars Knoll <lars.knoll@qt.io> | 2016-12-07 15:21:15 +0100 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2016-12-07 15:21:15 +0100 |
commit | 48591ce7dc00ec2c00ec3983a9572398fbd794b8 (patch) | |
tree | 304d40ab40e181aac8fe4e49e4ab9f274c52c1d9 /src/qml/types | |
parent | b4ccdf004af8ab5b9e327abf7f87d0bd34ee13c0 (diff) | |
parent | e0a3c6276a257aeb1cb3ef6d16a4dddcc65d8195 (diff) |
Merge remote-tracking branch 'origin/5.8.0' into 5.8
Change-Id: I19804e880005c66880eeabfaebf0b1093de80e6b
Diffstat (limited to 'src/qml/types')
-rw-r--r-- | src/qml/types/qqmldelegatemodel.cpp | 23 | ||||
-rw-r--r-- | src/qml/types/qqmldelegatemodel_p_p.h | 3 |
2 files changed, 17 insertions, 9 deletions
diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index 9b58ec35f8..d9a8b1d179 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -213,6 +213,7 @@ QQmlDelegateModelPrivate::QQmlDelegateModelPrivate(QQmlContext *ctxt) , m_reset(false) , m_transaction(false) , m_incubatorCleanupScheduled(false) + , m_waitingToFetchMore(false) , m_cacheItems(0) , m_items(0) , m_persistedItems(0) @@ -227,6 +228,15 @@ QQmlDelegateModelPrivate::~QQmlDelegateModelPrivate() m_cacheMetaType->release(); } +void QQmlDelegateModelPrivate::requestMoreIfNecessary() +{ + Q_Q(QQmlDelegateModel); + if (!m_waitingToFetchMore && m_adaptorModel.canFetchMore()) { + m_waitingToFetchMore = true; + QCoreApplication::postEvent(q, new QEvent(QEvent::UpdateRequest)); + } +} + void QQmlDelegateModelPrivate::init() { Q_Q(QQmlDelegateModel); @@ -334,9 +344,7 @@ void QQmlDelegateModel::componentComplete() &inserts); d->itemsInserted(inserts); d->emitChanges(); - - if (d->m_adaptorModel.canFetchMore()) - QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + d->requestMoreIfNecessary(); } /*! @@ -375,8 +383,7 @@ void QQmlDelegateModel::setModel(const QVariant &model) if (d->m_complete) { _q_itemsInserted(0, d->m_adaptorModel.count()); - if (d->m_adaptorModel.canFetchMore()) - QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); + d->requestMoreIfNecessary(); } } @@ -922,7 +929,6 @@ void QQmlDelegateModelPrivate::setInitialState(QQDMIncubationTask *incubationTas QObject *QQmlDelegateModelPrivate::object(Compositor::Group group, int index, bool asynchronous) { - Q_Q(QQmlDelegateModel); if (!m_delegate || index < 0 || index >= m_compositor.count(group)) { qWarning() << "DelegateModel::item: index out range" << index << m_compositor.count(group); return 0; @@ -989,8 +995,8 @@ QObject *QQmlDelegateModelPrivate::object(Compositor::Group group, int index, bo QQmlContextData::get(m_context)); } - if (index == m_compositor.count(group) - 1 && m_adaptorModel.canFetchMore()) - QCoreApplication::postEvent(q, new QEvent(QEvent::UpdateRequest)); + if (index == m_compositor.count(group) - 1) + requestMoreIfNecessary(); // Remove the temporary reference count. cacheItem->scriptRef -= 1; @@ -1110,6 +1116,7 @@ bool QQmlDelegateModel::event(QEvent *e) { Q_D(QQmlDelegateModel); if (e->type() == QEvent::UpdateRequest) { + d->m_waitingToFetchMore = false; d->m_adaptorModel.fetchMore(); } else if (e->type() == QEvent::User) { d->m_incubatorCleanupScheduled = false; diff --git a/src/qml/types/qqmldelegatemodel_p_p.h b/src/qml/types/qqmldelegatemodel_p_p.h index 6cb82fddfc..7d97358b3d 100644 --- a/src/qml/types/qqmldelegatemodel_p_p.h +++ b/src/qml/types/qqmldelegatemodel_p_p.h @@ -149,7 +149,6 @@ public: int groups; int index; - Q_SIGNALS: void modelIndexChanged(); @@ -261,6 +260,7 @@ public: void init(); void connectModel(QQmlAdaptorModel *model); + void requestMoreIfNecessary(); QObject *object(Compositor::Group group, int index, bool asynchronous); QQmlDelegateModel::ReleaseFlags release(QObject *object); QString stringValue(Compositor::Group group, int index, const QString &name); @@ -329,6 +329,7 @@ public: bool m_reset : 1; bool m_transaction : 1; bool m_incubatorCleanupScheduled : 1; + bool m_waitingToFetchMore : 1; union { struct { |