diff options
| author | Liang Qi <liang.qi@theqtcompany.com> | 2015-03-17 16:39:43 +0100 |
|---|---|---|
| committer | Liang Qi <liang.qi@theqtcompany.com> | 2015-03-17 16:39:43 +0100 |
| commit | 7232472c82dcba653ba010fd0d05da13a7fb5dec (patch) | |
| tree | 31af3761fb93417777775a578711ab07b5f81c50 /src | |
| parent | 8f488d0d540cb7478c5341f1812b5f945c8cf2d4 (diff) | |
| parent | b735ba490fa9f43e1d14e356609a85f39e843259 (diff) | |
Merge remote-tracking branch 'origin/5.5' into dev
Change-Id: I9f4f561a6399b22c5f423dd853b07bffc9deebfc
Diffstat (limited to 'src')
| -rw-r--r-- | src/qml/jsruntime/qv4dateobject.cpp | 1 | ||||
| -rw-r--r-- | src/qml/jsruntime/qv4global_p.h | 6 | ||||
| -rw-r--r-- | src/quick/items/qquickitem.cpp | 5 | ||||
| -rw-r--r-- | src/quick/items/qquickrepeater.cpp | 92 | ||||
| -rw-r--r-- | src/quick/items/qquickrepeater_p_p.h | 4 |
5 files changed, 52 insertions, 56 deletions
diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp index 28f0f2e044..451ef2486d 100644 --- a/src/qml/jsruntime/qv4dateobject.cpp +++ b/src/qml/jsruntime/qv4dateobject.cpp @@ -55,6 +55,7 @@ # else # include "qplatformdefs.h" # endif +# include <unistd.h> // for _POSIX_THREAD_SAFE_FUNCTIONS #endif using namespace QV4; diff --git a/src/qml/jsruntime/qv4global_p.h b/src/qml/jsruntime/qv4global_p.h index a79f71ff64..4b08194b60 100644 --- a/src/qml/jsruntime/qv4global_p.h +++ b/src/qml/jsruntime/qv4global_p.h @@ -74,9 +74,11 @@ inline double trunc(double d) { return d > 0 ? floor(d) : ceil(d); } // // NOTE: This should match the logic in qv4targetplatform_p.h! -#if defined(Q_PROCESSOR_X86) && (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) || defined(Q_OS_FREEBSD)) +#if defined(Q_PROCESSOR_X86) && !defined(__ILP32__) \ + && (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_QNX) || defined(Q_OS_FREEBSD)) #define V4_ENABLE_JIT -#elif defined(Q_PROCESSOR_X86_64) && (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_FREEBSD)) +#elif defined(Q_PROCESSOR_X86_64) && !defined(__ILP32__) \ + && (defined(Q_OS_WIN) || defined(Q_OS_LINUX) || defined(Q_OS_MAC) || defined(Q_OS_FREEBSD)) #define V4_ENABLE_JIT #elif defined(Q_PROCESSOR_ARM_32) diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 68ea5f4dbf..776da86b7e 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -2518,13 +2518,12 @@ void QQuickItem::setParentItem(QQuickItem *parentItem) QQuickWindowPrivate::get(d->window)->parentlessItems.remove(this); } - QQuickWindow *oldParentWindow = oldParentItem ? QQuickItemPrivate::get(oldParentItem)->window : 0; QQuickWindow *parentWindow = parentItem ? QQuickItemPrivate::get(parentItem)->window : 0; - if (oldParentWindow == parentWindow) { + if (d->window == parentWindow) { // Avoid freeing and reallocating resources if the window stays the same. d->parentItem = parentItem; } else { - if (oldParentWindow) + if (d->window) d->derefWindow(); d->parentItem = parentItem; if (parentWindow) diff --git a/src/quick/items/qquickrepeater.cpp b/src/quick/items/qquickrepeater.cpp index c5fea34e0b..0168d73c8f 100644 --- a/src/quick/items/qquickrepeater.cpp +++ b/src/quick/items/qquickrepeater.cpp @@ -44,7 +44,11 @@ QT_BEGIN_NAMESPACE QQuickRepeaterPrivate::QQuickRepeaterPrivate() - : model(0), ownModel(false), inRequest(false), dataSourceIsObject(false), delegateValidated(false), itemCount(0), createFrom(-1) + : model(0) + , ownModel(false) + , dataSourceIsObject(false) + , delegateValidated(false) + , itemCount(0) { } @@ -378,57 +382,51 @@ void QQuickRepeater::regenerate() d->itemCount = count(); d->deletables.resize(d->itemCount); - d->createFrom = 0; - d->createItems(); + d->requestItems(); } -void QQuickRepeaterPrivate::createItems() +void QQuickRepeaterPrivate::requestItems() { - Q_Q(QQuickRepeater); - if (createFrom == -1) - return; - inRequest = true; - for (int ii = createFrom; ii < itemCount; ++ii) { - if (!deletables.at(ii)) { - QObject *object = model->object(ii, false); - QQuickItem *item = qmlobject_cast<QQuickItem*>(object); - if (!item) { - if (object) { - model->release(object); - if (!delegateValidated) { - delegateValidated = true; - QObject* delegate = q->delegate(); - qmlInfo(delegate ? delegate : q) << QQuickRepeater::tr("Delegate must be of Item type"); - } + for (int i = 0; i < itemCount; i++) { + QObject *object = model->object(i, false); + if (object) + model->release(object); + } +} + +void QQuickRepeater::createdItem(int index, QObject *) +{ + Q_D(QQuickRepeater); + if (!d->deletables.at(index)) { + QObject *object = d->model->object(index, false); + QQuickItem *item = qmlobject_cast<QQuickItem*>(object); + if (!item) { + if (object) { + d->model->release(object); + if (!d->delegateValidated) { + d->delegateValidated = true; + QObject* delegate = this->delegate(); + qmlInfo(delegate ? delegate : this) << QQuickRepeater::tr("Delegate must be of Item type"); } - createFrom = ii; - break; } - deletables[ii] = item; - item->setParentItem(q->parentItem()); - if (ii > 0 && deletables.at(ii-1)) { - item->stackAfter(deletables.at(ii-1)); - } else { - QQuickItem *after = q; - for (int si = ii+1; si < itemCount; ++si) { - if (deletables.at(si)) { - after = deletables.at(si); - break; - } + return; + } + d->deletables[index] = item; + item->setParentItem(parentItem()); + if (index > 0 && d->deletables.at(index-1)) { + item->stackAfter(d->deletables.at(index-1)); + } else { + QQuickItem *after = this; + for (int si = index+1; si < d->itemCount; ++si) { + if (d->deletables.at(si)) { + after = d->deletables.at(si); + break; } - item->stackBefore(after); } - emit q->itemAdded(ii, item); + item->stackBefore(after); } + emit itemAdded(index, item); } - inRequest = false; -} - -void QQuickRepeater::createdItem(int, QObject *) -{ - Q_D(QQuickRepeater); - if (!d->inRequest) - d->createItems(); } void QQuickRepeater::initItem(int, QObject *object) @@ -476,7 +474,6 @@ void QQuickRepeater::modelUpdated(const QQmlChangeSet &changeSet, bool reset) difference -= remove.count; } - d->createFrom = -1; foreach (const QQmlChangeSet::Change &insert, changeSet.inserts()) { int index = qMin(insert.index, d->deletables.count()); if (insert.isMove()) { @@ -491,14 +488,13 @@ void QQuickRepeater::modelUpdated(const QQmlChangeSet &changeSet, bool reset) int modelIndex = index + i; ++d->itemCount; d->deletables.insert(modelIndex, 0); - if (d->createFrom == -1) - d->createFrom = modelIndex; + QObject *object = d->model->object(modelIndex, false); + if (object) + d->model->release(object); } difference += insert.count; } - d->createItems(); - if (difference != 0) emit countChanged(); } diff --git a/src/quick/items/qquickrepeater_p_p.h b/src/quick/items/qquickrepeater_p_p.h index 026633f156..732ba4d5b8 100644 --- a/src/quick/items/qquickrepeater_p_p.h +++ b/src/quick/items/qquickrepeater_p_p.h @@ -63,17 +63,15 @@ public: ~QQuickRepeaterPrivate(); private: - void createItems(); + void requestItems(); QPointer<QQmlInstanceModel> model; QVariant dataSource; QPointer<QObject> dataSourceAsObject; bool ownModel : 1; - bool inRequest : 1; bool dataSourceIsObject : 1; bool delegateValidated : 1; int itemCount; - int createFrom; QVector<QPointer<QQuickItem> > deletables; }; |
