diff --git a/app/node/nodecopypaste.cpp b/app/node/nodecopypaste.cpp index e0456cc03..c16a1f512 100644 --- a/app/node/nodecopypaste.cpp +++ b/app/node/nodecopypaste.cpp @@ -36,9 +36,11 @@ void NodeCopyPasteService::CopyNodesToClipboard(const QVector &nodes, vo QXmlStreamWriter writer(©_str); writer.setAutoFormatting(true); - writer.writeStartDocument(QString::number(Core::kProjectVersion)); + writer.writeStartDocument(); writer.writeStartElement(QStringLiteral("olive")); + writer.writeTextElement(QStringLiteral("version"), QString::number(Core::kProjectVersion)); + foreach (Node* n, nodes) { writer.writeStartElement(QStringLiteral("node")); writer.writeAttribute(QStringLiteral("id"), n->id()); @@ -65,7 +67,7 @@ QVector NodeCopyPasteService::PasteNodesFromClipboard(NodeGraph *graph, } QXmlStreamReader reader(clipboard); - uint data_version = reader.documentVersion().toUInt(); + uint data_version = 0; QVector pasted_nodes; XMLNodeData xml_node_data; @@ -75,7 +77,14 @@ QVector NodeCopyPasteService::PasteNodesFromClipboard(NodeGraph *graph, // Default to current version - this may not be desirable? while (XMLReadNextStartElement(&reader)) { - if (reader.name() == QStringLiteral("node")) { + if (reader.name() == QStringLiteral("version")) { + data_version = reader.readElementText().toUInt(); + } else if (reader.name() == QStringLiteral("node")) { + if (data_version == 0) { + // Refuse to create any nodes if we didn't get a version string + return QVector(); + } + Node* node = nullptr; XMLAttributeLoop((&reader), attr) { @@ -91,6 +100,11 @@ QVector NodeCopyPasteService::PasteNodesFromClipboard(NodeGraph *graph, pasted_nodes.append(node); } } else if (reader.name() == QStringLiteral("custom")) { + if (data_version == 0) { + // Refuse to create any nodes if we didn't get a version string + return QVector(); + } + PasteNodesFromClipboardInternal(&reader, xml_node_data, userdata); } else { reader.skipCurrentElement();