diff --git a/src/plugins/qmldesigner/designercore/include/modelnode.h b/src/plugins/qmldesigner/designercore/include/modelnode.h index e9c47ccae47..961d3914059 100644 --- a/src/plugins/qmldesigner/designercore/include/modelnode.h +++ b/src/plugins/qmldesigner/designercore/include/modelnode.h @@ -226,6 +226,7 @@ public: qint32 internalId() const; void setNodeSource(const QString&); + void setNodeSource(const QString &newNodeSource, NodeSourceType type); QString nodeSource() const; QString convertTypeToImportAlias() const; diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp index e2887782abe..1eb4bb3b9fc 100644 --- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp +++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp @@ -642,6 +642,9 @@ void NodeInstanceView::nodeSourceChanged(const ModelNode &node, const QString & NodeInstance instance = instanceForModelNode(node); ChangeNodeSourceCommand changeNodeSourceCommand(instance.instanceId(), newNodeSource); m_nodeInstanceServer->changeNodeSource(changeNodeSourceCommand); + + // Puppet doesn't deal with node source changes properly, so just reset the puppet for now + delayedRestartProcess(); // TODO: Remove this once the issue is properly fixed (QDS-4955) } } diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp index 0e40c8edabe..64b51ff69fa 100644 --- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp +++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp @@ -1278,6 +1278,22 @@ void ModelNode::setNodeSource(const QString &newNodeSource) m_model.data()->d->setNodeSource(internalNode(), newNodeSource); } +void ModelNode::setNodeSource(const QString &newNodeSource, NodeSourceType type) +{ + Internal::WriteLocker locker(m_model.data()); + + if (!isValid()) { + Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid"); + throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__); + } + + if (internalNode()->nodeSourceType() == type && internalNode()->nodeSource() == newNodeSource) + return; + + internalNode()->setNodeSourceType(type); // Set type first as it doesn't trigger any notifies + m_model.data()->d->setNodeSource(internalNode(), newNodeSource); +} + QString ModelNode::nodeSource() const { if (!isValid()) diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp index 3c6a64d02c2..f3fb6f5cfda 100644 --- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp +++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp @@ -2086,7 +2086,7 @@ void TextToModelMerger::setupComponent(const ModelNode &node) return; //No object definition found if (node.nodeSource() != result) - ModelNode(node).setNodeSource(result); + ModelNode(node).setNodeSource(result, ModelNode::NodeWithComponentSource); } void TextToModelMerger::collectLinkErrors(QList *errors, const ReadingContext &ctxt) @@ -2256,7 +2256,7 @@ void TextToModelMerger::setupCustomParserNode(const ModelNode &node) return; if (node.nodeSource() != modelText) - ModelNode(node).setNodeSource(modelText); + ModelNode(node).setNodeSource(modelText, ModelNode::NodeWithCustomParserSource); }