Sdk/Canvas: Fix crash at Canvas destruction

This commit is contained in:
Lynix 2017-01-15 12:12:58 +01:00
parent 5865679891
commit e1e290808a
4 changed files with 13 additions and 1 deletions

View File

@ -89,6 +89,7 @@ namespace Ndk
inline BaseWidget(); inline BaseWidget();
inline void DestroyChild(BaseWidget* widget); inline void DestroyChild(BaseWidget* widget);
void DestroyChildren();
inline void NotifyParentResized(const Nz::Vector2f& newSize); inline void NotifyParentResized(const Nz::Vector2f& newSize);
inline void UpdateCanvasIndex(std::size_t index); inline void UpdateCanvasIndex(std::size_t index);

View File

@ -23,7 +23,7 @@ namespace Ndk
inline Canvas(WorldHandle world, Nz::EventHandler& eventHandler); inline Canvas(WorldHandle world, Nz::EventHandler& eventHandler);
Canvas(const Canvas&) = delete; Canvas(const Canvas&) = delete;
Canvas(Canvas&&) = delete; Canvas(Canvas&&) = delete;
~Canvas() = default; inline ~Canvas();
inline const WorldHandle& GetWorld() const; inline const WorldHandle& GetWorld() const;

View File

@ -22,6 +22,12 @@ namespace Ndk
m_textEnteredSlot.Connect(eventHandler.OnTextEntered, this, &Canvas::OnTextEntered); m_textEnteredSlot.Connect(eventHandler.OnTextEntered, this, &Canvas::OnTextEntered);
} }
inline Canvas::~Canvas()
{
// Destroy children explicitly because they signal us when getting destroyed, and that can't happend after our own destruction
DestroyChildren();
}
inline const WorldHandle& Canvas::GetWorld() const inline const WorldHandle& Canvas::GetWorld() const
{ {
return m_world; return m_world;

View File

@ -165,4 +165,9 @@ namespace Ndk
m_children.erase(it); m_children.erase(it);
} }
void BaseWidget::DestroyChildren()
{
m_children.clear();
}
} }