diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2021-01-29 10:29:04 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2021-01-29 16:52:29 +0100 |
commit | 3e539bf997004b834e296ef1e3c8298f45e74a57 (patch) | |
tree | 61abff82eaca914fff0ee1c6b297c78b1666bac4 /src/qml/qml/qqml.cpp | |
parent | 4bec8958bb8f709efe74216fb68f36976c5a7a5b (diff) |
Move implementation of functions declared in qqml.h into qqml.cpp
It makes no sense to have them qqmlengine.cpp.
Change-Id: I138807c7650ec7aef4c6e8833e8bac8a6f179d1c
Reviewed-by: Maximilian Goldstein <max.goldstein@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
Diffstat (limited to 'src/qml/qml/qqml.cpp')
-rw-r--r-- | src/qml/qml/qqml.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/qml/qml/qqml.cpp b/src/qml/qml/qqml.cpp index d4eeff90a2..bda4954bb2 100644 --- a/src/qml/qml/qqml.cpp +++ b/src/qml/qml/qqml.cpp @@ -48,11 +48,87 @@ #include <private/qqmltype_p_p.h> #include <private/qqmltypemodule_p.h> #include <private/qqmltypenotavailable_p.h> +#include <private/qqmlcomponent_p.h> #include <QtCore/qmutex.h> QT_BEGIN_NAMESPACE + +/*! + \internal +*/ +void qmlExecuteDeferred(QObject *object) +{ + QQmlData *data = QQmlData::get(object); + + if (data && !data->deferredData.isEmpty() && !data->wasDeleted(object)) { + QQmlEnginePrivate *ep = QQmlEnginePrivate::get(data->context->engine()); + + QQmlComponentPrivate::DeferredState state; + QQmlComponentPrivate::beginDeferred(ep, object, &state); + + // Release the reference for the deferral action (we still have one from construction) + data->releaseDeferredData(); + + QQmlComponentPrivate::completeDeferred(ep, &state); + } +} + +QQmlContext *qmlContext(const QObject *obj) +{ + return QQmlEngine::contextForObject(obj); +} + +QQmlEngine *qmlEngine(const QObject *obj) +{ + QQmlData *data = QQmlData::get(obj, false); + if (!data || !data->context) + return nullptr; + return data->context->engine(); +} + +static QObject *resolveAttachedProperties(QQmlAttachedPropertiesFunc pf, QQmlData *data, + QObject *object, bool create) +{ + if (!pf) + return nullptr; + + QObject *rv = data->hasExtendedData() ? data->attachedProperties()->value(pf) : 0; + if (rv || !create) + return rv; + + rv = pf(object); + + if (rv) + data->attachedProperties()->insert(pf, rv); + + return rv; +} + +QQmlAttachedPropertiesFunc qmlAttachedPropertiesFunction(QObject *object, + const QMetaObject *attachedMetaObject) +{ + QQmlEngine *engine = object ? qmlEngine(object) : nullptr; + return QQmlMetaType::attachedPropertiesFunc(engine ? QQmlEnginePrivate::get(engine) : nullptr, + attachedMetaObject); +} + +QObject *qmlAttachedPropertiesObject(QObject *object, QQmlAttachedPropertiesFunc func, bool create) +{ + if (!object) + return nullptr; + + QQmlData *data = QQmlData::get(object, create); + + // Attached properties are only on objects created by QML, + // unless explicitly requested (create==true) + if (!data) + return nullptr; + + return resolveAttachedProperties(func, data, object, create); +} + int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, |