Skip to content

Commit b0dea08

Browse files
committed
Fix pages are incorrectly loaded from templates when adding items
1 parent 885f0a5 commit b0dea08

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

src/core/layout/qgslayout.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,10 +835,13 @@ QList< QgsLayoutItem * > QgsLayout::addItemsFromXml( const QDomElement &parentEl
835835
}
836836
}
837837

838-
const QDomNodeList layoutItemList = parentElement.elementsByTagName( QStringLiteral( "LayoutItem" ) );
838+
const QDomNodeList layoutItemList = parentElement.childNodes();
839839
for ( int i = 0; i < layoutItemList.size(); ++i )
840840
{
841841
const QDomElement currentItemElem = layoutItemList.at( i ).toElement();
842+
if ( currentItemElem.nodeName() != QStringLiteral( "LayoutItem" ) )
843+
continue;
844+
842845
const int itemType = currentItemElem.attribute( QStringLiteral( "type" ) ).toInt();
843846
std::unique_ptr< QgsLayoutItem > item( QgsApplication::layoutItemRegistry()->createItem( itemType, this ) );
844847
if ( !item )

tests/src/python/test_qgslayout.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ def testSaveLoadTemplate(self):
222222

223223
p = QgsProject()
224224
l = QgsLayout(p)
225+
l.initializeDefaults()
225226

226227
# add some items
227228
item1 = QgsLayoutItemLabel(l)
@@ -285,11 +286,10 @@ def testSaveLoadTemplate(self):
285286
# clearing existing items
286287
new_items3, ok = l2.loadFromTemplate(doc, QgsReadWriteContext(), True)
287288
self.assertTrue(ok)
288-
self.assertEqual(len(new_items3), 2)
289+
self.assertEqual(len(new_items3), 3) # includes page
289290
items = l2.items()
290-
self.assertEqual(len(items), 2)
291-
self.assertTrue([i for i in items if i.id() == 'xxyyxx'])
292-
self.assertTrue([i for i in items if i.id() == 'zzyyzz'])
291+
self.assertTrue([i for i in items if isinstance(i, QgsLayoutItem) and i.id() == 'xxyyxx'])
292+
self.assertTrue([i for i in items if isinstance(i, QgsLayoutItem) and i.id() == 'zzyyzz'])
293293
self.assertTrue(new_items3[0] in l2.items())
294294
self.assertTrue(new_items3[1] in l2.items())
295295
self.assertIn(new_items3[0].templateUuid(), original_uuids)

0 commit comments

Comments
 (0)