aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickdeferredexecute.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickdeferredexecute.cpp')
-rw-r--r--src/quicktemplates2/qquickdeferredexecute.cpp150
1 files changed, 0 insertions, 150 deletions
diff --git a/src/quicktemplates2/qquickdeferredexecute.cpp b/src/quicktemplates2/qquickdeferredexecute.cpp
deleted file mode 100644
index 817415c4..00000000
--- a/src/quicktemplates2/qquickdeferredexecute.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 The Qt Company Ltd.
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL3$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see http://www.qt.io/terms-conditions. For further
-** information use the contact form at http://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPLv3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or later as published by the Free
-** Software Foundation and appearing in the file LICENSE.GPL included in
-** the packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 2.0 requirements will be
-** met: http://www.gnu.org/licenses/gpl-2.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qquickdeferredexecute_p_p.h"
-
-#include <QtCore/qhash.h>
-#include <QtQml/qqmlengine.h>
-#include <QtQml/private/qqmldata_p.h>
-#include <QtQml/private/qqmlcomponent_p.h>
-#include <QtQml/private/qqmlobjectcreator_p.h>
-
-#include <deque>
-
-QT_BEGIN_NAMESPACE
-
-namespace QtQuickPrivate {
-
-typedef QHash<size_t, QQmlComponentPrivate::DeferredState *> DeferredStates;
-
-static inline size_t qHash(QObject *object, const QString &propertyName)
-{
- return ::qHash(object) + ::qHash(propertyName);
-}
-
-Q_GLOBAL_STATIC(DeferredStates, deferredStates)
-
-static void cancelDeferred(QQmlData *ddata, int propertyIndex)
-{
- auto dit = ddata->deferredData.rbegin();
- while (dit != ddata->deferredData.rend()) {
- (*dit)->bindings.remove(propertyIndex);
- ++dit;
- }
-}
-
-static bool beginDeferred(QQmlEnginePrivate *enginePriv, const QQmlProperty &property, QQmlComponentPrivate::DeferredState *deferredState)
-{
- QObject *object = property.object();
- QQmlData *ddata = QQmlData::get(object);
- Q_ASSERT(!ddata->deferredData.isEmpty());
-
- int propertyIndex = property.index();
- int wasInProgress = enginePriv->inProgressCreations;
-
- for (auto dit = ddata->deferredData.rbegin(); dit != ddata->deferredData.rend(); ++dit) {
- QQmlData::DeferredData *deferData = *dit;
-
- auto bindings = deferData->bindings;
- auto range = bindings.equal_range(propertyIndex);
- if (range.first == bindings.end())
- continue;
-
- QQmlComponentPrivate::ConstructionState *state = new QQmlComponentPrivate::ConstructionState;
- state->completePending = true;
-
- QQmlContextData *creationContext = nullptr;
- state->creator.reset(new QQmlObjectCreator(deferData->context->parent(), deferData->compilationUnit, creationContext));
-
- enginePriv->inProgressCreations++;
-
- std::deque<const QV4::CompiledData::Binding *> reversedBindings;
- std::copy(range.first, range.second, std::front_inserter(reversedBindings));
- state->creator->beginPopulateDeferred(deferData->context);
- for (const QV4::CompiledData::Binding *binding : reversedBindings)
- state->creator->populateDeferredBinding(property, deferData->deferredIdx, binding);
- state->creator->finalizePopulateDeferred();
- state->errors << state->creator->errors;
-
- deferredState->constructionStates += state;
-
- // Cleanup any remaining deferred bindings for this property, also in inner contexts,
- // to avoid executing them later and overriding the property that was just populated.
- cancelDeferred(ddata, propertyIndex);
- break;
- }
-
- return enginePriv->inProgressCreations > wasInProgress;
-}
-
-void beginDeferred(QObject *object, const QString &property)
-{
- QQmlData *data = QQmlData::get(object);
- if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object) && data->context) {
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine());
-
- QQmlComponentPrivate::DeferredState *state = new QQmlComponentPrivate::DeferredState;
- if (beginDeferred(ep, QQmlProperty(object, property), state))
- deferredStates()->insert(qHash(object, property), state);
- else
- delete state;
-
- // Release deferred data for those compilation units that no longer have deferred bindings
- data->releaseDeferredData();
- }
-}
-
-void cancelDeferred(QObject *object, const QString &property)
-{
- QQmlData *data = QQmlData::get(object);
- if (data)
- cancelDeferred(data, QQmlProperty(object, property).index());
-}
-
-void completeDeferred(QObject *object, const QString &property)
-{
- QQmlData *data = QQmlData::get(object);
- QQmlComponentPrivate::DeferredState *state = deferredStates()->take(qHash(object, property));
- if (data && state && !data->wasDeleted(object)) {
- QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine());
- QQmlComponentPrivate::completeDeferred(ep, state);
- }
- delete state;
-}
-
-} // QtQuickPrivate
-
-QT_END_NAMESPACE