forked from qt-creator/qt-creator
QmlDesigner: Add early return for invalid row
Also avoiding reflection by locking during the write to the model. Change-Id: I290ae8fa38aae510454d3fa1af020d579881ff9c Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -37,6 +37,8 @@
|
||||
|
||||
#include <utils/qtcassert.h>
|
||||
|
||||
#include <QScopeGuard>
|
||||
|
||||
using namespace QmlDesigner;
|
||||
|
||||
static const int propertyNameRole = Qt::UserRole + 1;
|
||||
@@ -315,12 +317,21 @@ void DynamicPropertyRow::setupBackendValue()
|
||||
|
||||
void DynamicPropertyRow::commitValue(const QVariant &value)
|
||||
{
|
||||
if (m_lock)
|
||||
return;
|
||||
|
||||
if (m_row < 0)
|
||||
return;
|
||||
|
||||
auto propertiesModel = m_model->dynamicPropertiesModel();
|
||||
VariantProperty variantProperty = propertiesModel->variantPropertyForRow(m_row);
|
||||
|
||||
if (!Internal::DynamicPropertiesModel::isValueType(variantProperty.dynamicTypeName()))
|
||||
return;
|
||||
|
||||
m_lock = true;
|
||||
auto unlock = qScopeGuard([this] { m_lock = false; });
|
||||
|
||||
auto view = propertiesModel->view();
|
||||
RewriterTransaction transaction = view->beginRewriterTransaction(
|
||||
QByteArrayLiteral("DynamicPropertiesModel::commitValue"));
|
||||
@@ -335,6 +346,15 @@ void DynamicPropertyRow::commitValue(const QVariant &value)
|
||||
|
||||
void DynamicPropertyRow::commitExpression(const QString &expression)
|
||||
{
|
||||
if (m_lock)
|
||||
return;
|
||||
|
||||
if (m_row < 0)
|
||||
return;
|
||||
|
||||
m_lock = true;
|
||||
auto unlock = qScopeGuard([this] { m_lock = false; });
|
||||
|
||||
auto propertiesModel = m_model->dynamicPropertiesModel();
|
||||
BindingProperty bindingProperty = propertiesModel->bindingPropertyForRow(m_row);
|
||||
|
||||
|
@@ -105,6 +105,7 @@ private:
|
||||
PropertyEditorValue *m_backendValue = nullptr;
|
||||
DynamicPropertiesProxyModel *m_model = nullptr;
|
||||
QList<PropertyEditorValue *> m_proxyBackendValues;
|
||||
bool m_lock = false;
|
||||
};
|
||||
|
||||
QML_DECLARE_TYPE(DynamicPropertyRow)
|
||||
|
Reference in New Issue
Block a user