From 9bc218f334e9d740ec9c32d3d6b146e4f241fc19 Mon Sep 17 00:00:00 2001
From: Matthias Puchner <github@mpuchner.de>
Date: Tue, 30 Nov 2021 07:40:23 +0100
Subject: [PATCH] allow selective writing of child items

---
 GUI/Model/Session/SessionItem.cpp | 5 +++++
 GUI/Model/Session/SessionItem.h   | 1 +
 GUI/Model/Session/SessionXML.cpp  | 3 ++-
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/GUI/Model/Session/SessionItem.cpp b/GUI/Model/Session/SessionItem.cpp
index eb8fed9b6a5..57ef06eb248 100644
--- a/GUI/Model/Session/SessionItem.cpp
+++ b/GUI/Model/Session/SessionItem.cpp
@@ -543,6 +543,11 @@ void SessionItem::writeNonSessionItems(QXmlStreamWriter*) const {}
 
 void SessionItem::readNonSessionItems(QXmlStreamReader*) {}
 
+bool SessionItem::allowWritingChildToXml(SessionItem* child) const
+{
+    return true;
+}
+
 void SessionItem::childDeleted(SessionItem* child)
 {
     int index = rowOfChild(child);
diff --git a/GUI/Model/Session/SessionItem.h b/GUI/Model/Session/SessionItem.h
index eef243f3d9c..17a30899668 100644
--- a/GUI/Model/Session/SessionItem.h
+++ b/GUI/Model/Session/SessionItem.h
@@ -314,6 +314,7 @@ public:
 
     virtual void writeNonSessionItems(QXmlStreamWriter* writer) const;
     virtual void readNonSessionItems(QXmlStreamReader* reader);
+    virtual bool allowWritingChildToXml(SessionItem* child) const;
 
 private:
     void childDeleted(SessionItem* child);
diff --git a/GUI/Model/Session/SessionXML.cpp b/GUI/Model/Session/SessionXML.cpp
index f1118ea39ac..ce963bbd232 100644
--- a/GUI/Model/Session/SessionXML.cpp
+++ b/GUI/Model/Session/SessionXML.cpp
@@ -82,7 +82,8 @@ void GUI::Session::XML::writeItemAndChildItems(QXmlStreamWriter* writer, const S
     }
 
     for (auto* child : item->children())
-        writeItemAndChildItems(writer, child);
+        if (item->allowWritingChildToXml(child))
+            writeItemAndChildItems(writer, child);
 
     QByteArray a = item->serializeBinaryData();
     if (!a.isEmpty()) {
-- 
GitLab