From fc456a74d43cdd8f0cba12802eec1881d827eb48 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 21 Nov 2023 15:01:00 +0200 Subject: [PATCH] EffectMaker: Fix crash after opening saved effect when nodes exist Clear and removeAllNodes functions were consolidated into one clear() function, which now properly resets the entire model. This makes UI properly synced to actual model state when composition is opened, so the phantom nodes will no longer appear. Fixes: QDS-11347 Change-Id: I204760cca6af669daa43a18bfb199dfbf14b73cb Reviewed-by: Amr Elsayed Reviewed-by: Mahmoud Badri Reviewed-by: Qt CI Patch Build Bot --- .../effectMakerQmlSources/EffectMaker.qml | 2 +- .../effectmakernew/effectmakermodel.cpp | 20 +------------------ src/plugins/effectmakernew/effectmakermodel.h | 4 +--- 3 files changed, 3 insertions(+), 23 deletions(-) diff --git a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml index fd2ec56fd4f..3f962478e0b 100644 --- a/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml +++ b/share/qtcreator/qmldesigner/effectMakerQmlSources/EffectMaker.qml @@ -69,7 +69,7 @@ Item { tooltip: qsTr("Remove all effect nodes.") enabled: !EffectMakerBackend.effectMakerModel.isEmpty - onClicked: EffectMakerBackend.effectMakerModel.removeAllNodes() + onClicked: EffectMakerBackend.effectMakerModel.clear() } HelperWidgets.AbstractButton { diff --git a/src/plugins/effectmakernew/effectmakermodel.cpp b/src/plugins/effectmakernew/effectmakermodel.cpp index 4595fec59c5..d52e8858ca7 100644 --- a/src/plugins/effectmakernew/effectmakermodel.cpp +++ b/src/plugins/effectmakernew/effectmakermodel.cpp @@ -139,7 +139,7 @@ void EffectMakerModel::removeNode(int idx) bakeShaders(); } -void EffectMakerModel::removeAllNodes() +void EffectMakerModel::clear() { beginResetModel(); qDeleteAll(m_nodes); @@ -180,24 +180,6 @@ const QString &EffectMakerModel::qmlComponentString() const return m_qmlComponentString; } -void EffectMakerModel::clear() -{ - if (m_nodes.isEmpty()) - return; - - beginRemoveRows({}, 0, m_nodes.count()); - - for (CompositionNode *node : std::as_const(m_nodes)) - delete node; - - m_nodes.clear(); - - endRemoveRows(); - - setIsEmpty(true); - bakeShaders(); -} - const QList EffectMakerModel::allUniforms() { QList uniforms = {}; diff --git a/src/plugins/effectmakernew/effectmakermodel.h b/src/plugins/effectmakernew/effectmakermodel.h index b844acf0d08..60d291f7520 100644 --- a/src/plugins/effectmakernew/effectmakermodel.h +++ b/src/plugins/effectmakernew/effectmakermodel.h @@ -63,7 +63,7 @@ public: Q_INVOKABLE void moveNode(int fromIdx, int toIdx); Q_INVOKABLE void removeNode(int idx); - Q_INVOKABLE void removeAllNodes(); + Q_INVOKABLE void clear(); bool shadersUpToDate() const; void setShadersUpToDate(bool newShadersUpToDate); @@ -76,8 +76,6 @@ public: const QString &qmlComponentString() const; - void clear(); - Q_INVOKABLE void updateQmlComponent(); Q_INVOKABLE void resetEffectError(int type);