diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-09-03 10:42:30 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-09-04 06:55:55 +0000 |
commit | f942a777f5a6ca241e4a804db518b5f4eb73dcc3 (patch) | |
tree | f94fc98d09cec550f3bc5e4a9748e20b543467a2 /src/qml/qml | |
parent | e7899df08030030930a3e30f0c8947275328e4f0 (diff) |
Adjust to qtbase changes
- isQProperty has been renamed to bindable
- QNotifiedProperty is no more
- Bindable properties have a function to obtain the QBindable; store
that information in the qmltypes files.
Task-number: QTBUG-86434
Task-number: QTBUG-86435
Change-Id: I2ba593af1e197d04d2c30cfb9e6904a3d2059e4b
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/qml')
-rw-r--r-- | src/qml/qml/qqmlboundsignal.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlobjectcreator.cpp | 16 | ||||
-rw-r--r-- | src/qml/qml/qqmlpropertycache.cpp | 2 | ||||
-rw-r--r-- | src/qml/qml/qqmlpropertydata_p.h | 17 | ||||
-rw-r--r-- | src/qml/qml/qqmltypecompiler.cpp | 2 |
5 files changed, 22 insertions, 17 deletions
diff --git a/src/qml/qml/qqmlboundsignal.cpp b/src/qml/qml/qqmlboundsignal.cpp index b34ab18a72..5fd06da4bb 100644 --- a/src/qml/qml/qqmlboundsignal.cpp +++ b/src/qml/qml/qqmlboundsignal.cpp @@ -365,7 +365,7 @@ void QQmlBoundSignal_callback(QQmlNotifierEndpoint *e, void **a) //////////////////////////////////////////////////////////////////////// QQmlPropertyObserver::QQmlPropertyObserver(QQmlBoundSignalExpression *expr) - : QPropertyObserver([](QPropertyObserver *self, void *) { + : QPropertyObserver([](QPropertyObserver *self, QUntypedPropertyData *) { auto This = static_cast<QQmlPropertyObserver*>(self); This->expression->evaluate(QList<QVariant>()); }) diff --git a/src/qml/qml/qqmlobjectcreator.cpp b/src/qml/qml/qqmlobjectcreator.cpp index 5eb885c2e0..dc720349a1 100644 --- a/src/qml/qml/qqmlobjectcreator.cpp +++ b/src/qml/qml/qqmlobjectcreator.cpp @@ -928,15 +928,17 @@ bool QQmlObjectCreator::setPropertyBinding(const QQmlPropertyData *bindingProper _bindingTarget, signalIndex, context, _scopeObject, runtimeFunction, currentQmlContext()); - if (bindingProperty->isQProperty()) { + if (bindingProperty->isBindable()) { auto &observer = QQmlData::get(_scopeObject)->propertyObservers.emplace_back(expr); - void *argv[] = { &observer }; - _bindingTarget->qt_metacall(QMetaObject::RegisterQPropertyObserver, bindingProperty->coreIndex(), argv); + QUntypedBindable bindable; + void *argv[] = { &bindable }; + _bindingTarget->qt_metacall(QMetaObject::BindableProperty, bindingProperty->coreIndex(), argv); + bindable.observe(&observer); } else { QQmlBoundSignal *bs = new QQmlBoundSignal(_bindingTarget, signalIndex, _scopeObject, engine); bs->takeExpression(expr); } - } else if (bindingProperty->isQProperty()) { + } else if (bindingProperty->isBindable()) { QUntypedPropertyBinding qmlBinding; if (binding->isTranslationBinding()) { qmlBinding = QQmlTranslationPropertyBinding::create(bindingProperty, compilationUnit, binding); @@ -1447,8 +1449,10 @@ bool QQmlObjectCreator::finalize(QQmlInstantiationInterrupt &interrupt) while (!sharedState->allQPropertyBindings.isEmpty()) { auto& [target, index, qmlBinding] = sharedState->allQPropertyBindings.last(); - void *argv[] = { &qmlBinding }; - target->qt_metacall(QMetaObject::SetQPropertyBinding, index, argv); + QUntypedBindable bindable; + void *argv[] = { &bindable }; + target->qt_metacall(QMetaObject::BindableProperty, index, argv); + bindable.setBinding(qmlBinding); sharedState->allQPropertyBindings.pop_back(); if (watcher.hasRecursed() || interrupt.shouldInterrupt()) return false; diff --git a/src/qml/qml/qqmlpropertycache.cpp b/src/qml/qml/qqmlpropertycache.cpp index 5f91b5b94a..0e853f4e28 100644 --- a/src/qml/qml/qqmlpropertycache.cpp +++ b/src/qml/qml/qqmlpropertycache.cpp @@ -76,7 +76,7 @@ static QQmlPropertyData::Flags fastFlagsForProperty(const QMetaProperty &p) flags.setIsResettable(p.isResettable()); flags.setIsFinal(p.isFinal()); flags.setIsRequired(p.isRequired()); - flags.setIsQProperty(p.isQProperty()); + flags.setIsBindable(p.isBindable()); if (p.isEnumType()) flags.type = QQmlPropertyData::Flags::EnumType; diff --git a/src/qml/qml/qqmlpropertydata_p.h b/src/qml/qml/qqmlpropertydata_p.h index 6f1e1b6e4e..3b0a49a6d4 100644 --- a/src/qml/qml/qqmlpropertydata_p.h +++ b/src/qml/qml/qqmlpropertydata_p.h @@ -111,7 +111,7 @@ public: unsigned isSignalHandler : 1; // Function is a signal handler unsigned isOverload : 1; // Function is an overload of another function unsigned isRequiredORisCloned : 1; // Has REQUIRED flag OR The function was marked as cloned - unsigned isConstructorORisQProperty : 1; // The function was marked is a constructor OR property is backed by QProperty<T> + unsigned isConstructorORisBindable : 1; // The function was marked is a constructor OR property is backed by QProperty<T> unsigned isDirect : 1; // Exists on a C++ QMetaObject unsigned isOverridden : 1; // Is overridden by a extension property public: @@ -156,8 +156,9 @@ public: isOverridden = b; } - void setIsQProperty(bool b) { - isConstructorORisQProperty = b; + void setIsBindable(bool b) { + Q_ASSERT(type != FunctionType); + isConstructorORisBindable = b; } void setIsDirect(bool b) { @@ -208,7 +209,7 @@ public: void setIsConstructor(bool b) { Q_ASSERT(type == FunctionType); - isConstructorORisQProperty = b; + isConstructorORisBindable = b; } }; @@ -253,8 +254,8 @@ public: bool isOverload() const { return m_flags.isOverload; } void setOverload(bool onoff) { m_flags.isOverload = onoff; } bool isCloned() const { return isFunction() && m_flags.isRequiredORisCloned; } - bool isConstructor() const { return m_flags.isConstructorORisQProperty; } - bool isQProperty() const { return m_flags.isConstructorORisQProperty; } + bool isConstructor() const { return isFunction() && m_flags.isConstructorORisBindable; } + bool isBindable() const { return !isFunction() && m_flags.isConstructorORisBindable; } bool hasOverride() const { return overrideIndex() >= 0; } bool hasRevision() const { return revision() != QTypeRevision::zero(); } @@ -446,7 +447,7 @@ QQmlPropertyData::Flags::Flags() , isSignalHandler(false) , isOverload(false) , isRequiredORisCloned(false) - , isConstructorORisQProperty(false) + , isConstructorORisBindable(false) , isDirect(false) , isOverridden(false) , type(OtherType) @@ -465,7 +466,7 @@ bool QQmlPropertyData::Flags::operator==(const QQmlPropertyData::Flags &other) c isSignalHandler == other.isSignalHandler && isRequiredORisCloned == other.isRequiredORisCloned && type == other.type && - isConstructorORisQProperty == other.isConstructorORisQProperty && + isConstructorORisBindable == other.isConstructorORisBindable && notFullyResolved == other.notFullyResolved && overrideIndexIsProperty == other.overrideIndexIsProperty; } diff --git a/src/qml/qml/qqmltypecompiler.cpp b/src/qml/qml/qqmltypecompiler.cpp index a49722f57e..4be64aecf3 100644 --- a/src/qml/qml/qqmltypecompiler.cpp +++ b/src/qml/qml/qqmltypecompiler.cpp @@ -399,7 +399,7 @@ bool SignalHandlerConverter::convertSignalHandlerExpressionsToFunctionDeclaratio } parameters += param; } - } else if (!signalPropertyData && qPropertyData && qPropertyData->isQProperty()) { + } else if (!signalPropertyData && qPropertyData && qPropertyData->isBindable()) { finalSignalHandlerPropertyName = qPropertyName; flags = QV4::CompiledData::Binding::IsPropertyObserver; } else { |