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>
This commit is contained in:
parent
733d890430
commit
331c106bdb
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -259,8 +259,6 @@ void tst_QProperty::propertyArrays()
|
||||
|
||||
void tst_QProperty::boolProperty()
|
||||
{
|
||||
static_assert(sizeof(QProperty<bool>) == sizeof(void*), "Size of QProperty<bool> specialization must not exceed size of pointer");
|
||||
|
||||
QProperty<bool> first(true);
|
||||
QProperty<bool> second(false);
|
||||
QProperty<bool> all;
|
||||
|
Loading…
Reference in New Issue
Block a user