From 31dae66dfb08989d813db1016f2f76a9bc3ffd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Saviot?= Date: Wed, 9 May 2018 18:03:30 +0200 Subject: [PATCH] [poincare] DynLayout: Do not detach children needing to be deleted Change-Id: Id46afd541c8090268e7f48f09a07e6cb6240f445 --- poincare/include/poincare/dynamic_layout_hierarchy.h | 2 ++ poincare/src/layout/dynamic_layout_hierarchy.cpp | 12 +++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/poincare/include/poincare/dynamic_layout_hierarchy.h b/poincare/include/poincare/dynamic_layout_hierarchy.h index 573e5be64..9d5830f11 100644 --- a/poincare/include/poincare/dynamic_layout_hierarchy.h +++ b/poincare/include/poincare/dynamic_layout_hierarchy.h @@ -35,6 +35,8 @@ public: protected: const ExpressionLayout ** m_children; int m_numberOfChildren; +private: + void removeDetachedChildren(); }; } diff --git a/poincare/src/layout/dynamic_layout_hierarchy.cpp b/poincare/src/layout/dynamic_layout_hierarchy.cpp index 409a0b2a3..ba55192b8 100644 --- a/poincare/src/layout/dynamic_layout_hierarchy.cpp +++ b/poincare/src/layout/dynamic_layout_hierarchy.cpp @@ -46,7 +46,7 @@ void DynamicLayoutHierarchy::mergeChildrenAtIndex(DynamicLayoutHierarchy * eL, i } } addChildrenAtIndex(eL->children(), eL->numberOfChildren(), indexForInsertion, removeEmptyChildren); - eL->detachChildren(); + eL->removeDetachedChildren(); delete eL; } @@ -160,4 +160,14 @@ void DynamicLayoutHierarchy::removeAndDeleteChildren() { m_numberOfChildren = 0; } +void DynamicLayoutHierarchy::removeDetachedChildren() { + int currentIndex = 0; + for (int i = 0; i < m_numberOfChildren; i++) { + if (m_children[i] != nullptr && m_children[i]->parent() == this) { + m_children[currentIndex++] = m_children[i]; + } + } + m_numberOfChildren = currentIndex; +} + }