From 3b265858a056ccdb775c3f01277aac951a359e6a Mon Sep 17 00:00:00 2001 From: Thomas Hartmann Date: Tue, 14 Dec 2021 15:52:31 +0100 Subject: [PATCH] QmlDesigner: Fix crash Create an id for nodes if keyframe is added. Added missing ::executeInTransaction(). Using executeInTransaction() catches exceptions. Task-number: QDS-5769 Change-Id: I395d98eec6ead091bd8578019ec3f958b4099db8 Reviewed-by: Tim Jenssen --- .../components/propertyeditor/propertyeditorcontextobject.cpp | 4 +++- .../designercore/model/qmltimelinekeyframegroup.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp index bdfa8fb2026..b569ce37baf 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditorcontextobject.cpp @@ -317,7 +317,9 @@ void PropertyEditorContextObject::insertKeyframe(const QString &propertyName) QTC_ASSERT(timeline.isValid(), return ); QTC_ASSERT(selectedNode.isValid(), return ); - timeline.insertKeyframe(selectedNode, propertyName.toUtf8()); + rewriterView->executeInTransaction("PropertyEditorContextObject::insertKeyframe", [&]{ + timeline.insertKeyframe(selectedNode, propertyName.toUtf8()); + }); } int PropertyEditorContextObject::majorVersion() const diff --git a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp index 924a4e0ee65..55e147eeeed 100644 --- a/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp +++ b/src/plugins/qmldesigner/designercore/model/qmltimelinekeyframegroup.cpp @@ -74,7 +74,9 @@ void QmlTimelineKeyframeGroup::setTarget(const ModelNode &target) { QTC_ASSERT(isValid(), return ); - modelNode().bindingProperty("target").setExpression(target.id()); + ModelNode nonConstTarget = target; + + modelNode().bindingProperty("target").setExpression(nonConstTarget.validId()); } PropertyName QmlTimelineKeyframeGroup::propertyName() const