summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-08-12 11:33:13 +0200
committerLars Knoll <lars.knoll@qt.io>2020-09-02 22:44:27 +0200
commit331c106bdbf12c6925c2c40f3813b71c65caf9a2 (patch)
tree4a44b8be13f5e636ad7f0a38f1474b438531cc5d /src/corelib/kernel
parent733d890430542e907b9014a2cf73d63edf931245 (diff)
Remove the special handling of QProperty<bool>
Since we will be storing property data differently in most cases, having this special case would create too many additional complications. Change-Id: I27042b0730559bb375d8e3c07324398403a9885d Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel')
-rw-r--r--src/corelib/kernel/qproperty.cpp31
-rw-r--r--src/corelib/kernel/qproperty_p.h4
-rw-r--r--src/corelib/kernel/qpropertyprivate.h22
3 files changed, 5 insertions, 52 deletions
diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp
index a0cdda4200..bd623bed18 100644
--- a/src/corelib/kernel/qproperty.cpp
+++ b/src/corelib/kernel/qproperty.cpp
@@ -86,15 +86,8 @@ void QPropertyBindingPrivate::markDirtyAndNotifyObservers()
dirty = true;
if (firstObserver)
firstObserver.notify(this, propertyDataPtr);
- if (hasStaticObserver) {
- if (isBool) {
- auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr);
- bool oldValue = propertyPtr->extraBit();
- staticObserverCallback(staticObserver, &oldValue);
- } else {
- staticObserverCallback(staticObserver, propertyDataPtr);
- }
- }
+ if (hasStaticObserver)
+ staticObserverCallback(staticObserver, propertyDataPtr);
}
bool QPropertyBindingPrivate::evaluateIfDirtyAndReturnTrueIfValueChanged()
@@ -123,25 +116,9 @@ bool QPropertyBindingPrivate::evaluateIfDirtyAndReturnTrueIfValueChanged()
bool changed = false;
if (hasStaticObserver && staticGuardCallback) {
- if (isBool) {
- auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr);
- bool newValue = propertyPtr->extraBit();
- changed = staticGuardCallback(metaType, &newValue, evaluationFunction, staticObserver);
- if (changed && !error.hasError())
- propertyPtr->setExtraBit(newValue);
- } else {
- changed = staticGuardCallback(metaType, propertyDataPtr, evaluationFunction, staticObserver);
- }
+ changed = staticGuardCallback(metaType, propertyDataPtr, evaluationFunction, staticObserver);
} else {
- if (isBool) {
- auto propertyPtr = reinterpret_cast<QPropertyBase *>(propertyDataPtr);
- bool newValue = propertyPtr->extraBit();
- changed = evaluationFunction(metaType, &newValue);
- if (changed && !error.hasError())
- propertyPtr->setExtraBit(newValue);
- } else {
- changed = evaluationFunction(metaType, propertyDataPtr);
- }
+ changed = evaluationFunction(metaType, propertyDataPtr);
}
dirty = false;
diff --git a/src/corelib/kernel/qproperty_p.h b/src/corelib/kernel/qproperty_p.h
index 9c43c23959..4cb55f8b47 100644
--- a/src/corelib/kernel/qproperty_p.h
+++ b/src/corelib/kernel/qproperty_p.h
@@ -140,7 +140,6 @@ private:
bool dirty = false;
bool updating = false;
bool hasStaticObserver = false;
- bool isBool = false;
QUntypedPropertyBinding::BindingEvaluationFunction evaluationFunction;
@@ -168,8 +167,7 @@ public:
QPropertyBindingPrivate(QMetaType metaType, QUntypedPropertyBinding::BindingEvaluationFunction evaluationFunction,
const QPropertyBindingSourceLocation &location)
- : isBool(metaType.id() == QMetaType::Bool)
- , evaluationFunction(std::move(evaluationFunction))
+ : evaluationFunction(std::move(evaluationFunction))
, inlineDependencyObservers() // Explicit initialization required because of union
, location(location)
, metaType(metaType)
diff --git a/src/corelib/kernel/qpropertyprivate.h b/src/corelib/kernel/qpropertyprivate.h
index 4d8a457e32..fe6895d953 100644
--- a/src/corelib/kernel/qpropertyprivate.h
+++ b/src/corelib/kernel/qpropertyprivate.h
@@ -157,28 +157,6 @@ public:
}
};
-template<>
-struct QPropertyValueStorage<bool>
-{
- QPropertyBase priv;
-
- QPropertyValueStorage() = default;
- Q_DISABLE_COPY(QPropertyValueStorage)
- explicit QPropertyValueStorage(bool initialValue) { priv.setExtraBit(initialValue); }
- QPropertyValueStorage &operator=(bool newValue) { priv.setExtraBit(newValue); return *this; }
- QPropertyValueStorage(QPropertyValueStorage &&other) : priv(std::move(other.priv), this) {}
- QPropertyValueStorage &operator=(QPropertyValueStorage &&other) { priv.moveAssign(std::move(other.priv), this); return *this; }
-
- bool getValue() const { return priv.extraBit(); }
- bool setValueAndReturnTrueIfChanged(bool v)
- {
- if (v == priv.extraBit())
- return false;
- priv.setExtraBit(v);
- return true;
- }
-};
-
template <typename T, typename Tag>
class QTagPreservingPointerToPointer
{