aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@theqtcompany.com>2015-03-17 16:39:43 +0100
committerLiang Qi <liang.qi@theqtcompany.com>2015-03-17 16:39:43 +0100
commit7232472c82dcba653ba010fd0d05da13a7fb5dec (patch)
tree31af3761fb93417777775a578711ab07b5f81c50 /src
parent8f488d0d540cb7478c5341f1812b5f945c8cf2d4 (diff)
parentb735ba490fa9f43e1d14e356609a85f39e843259 (diff)
Merge remote-tracking branch 'origin/5.5' into dev
Diffstat (limited to 'src')
-rw-r--r--src/qml/jsruntime/qv4dateobject.cpp1
-rw-r--r--src/qml/jsruntime/qv4global_p.h6
-rw-r--r--src/quick/items/qquickitem.cpp5
-rw-r--r--src/quick/items/qquickrepeater.cpp92
-rw-r--r--src/quick/items/qquickrepeater_p_p.h4
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;
};