Sdk: Fix segfault when deleting hovered widget

This commit is contained in:
Jérôme Leclercq
2017-10-06 14:12:18 +02:00
committed by Lynix
parent 46e684c275
commit 84537fcfb8
5 changed files with 63 additions and 48 deletions

View File

@@ -80,7 +80,7 @@ namespace Ndk
};
protected:
EntityHandle CreateEntity();
const EntityHandle& CreateEntity();
void DestroyEntity(Entity* entity);
virtual void Layout();
void InvalidateNode() override;

View File

@@ -39,7 +39,7 @@ namespace Ndk
std::size_t RegisterWidget(BaseWidget* widget);
inline void SetKeyboardOwner(BaseWidget* widget);
inline void SetKeyboardOwner(std::size_t canvasIndex);
void UnregisterWidget(std::size_t index);
@@ -67,10 +67,10 @@ namespace Ndk
NazaraSlot(Nz::EventHandler, OnMouseLeft, m_mouseLeftSlot);
NazaraSlot(Nz::EventHandler, OnTextEntered, m_textEnteredSlot);
std::size_t m_keyboardOwner;
std::size_t m_hoveredWidget;
std::vector<WidgetBox> m_widgetBoxes;
Nz::CursorControllerHandle m_cursorController;
const WidgetBox* m_hoveredWidget;
BaseWidget* m_keyboardOwner;
WorldHandle m_world;
};
}

View File

@@ -8,9 +8,9 @@
namespace Ndk
{
inline Canvas::Canvas(WorldHandle world, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController) :
m_hoveredWidget(InvalidCanvasIndex),
m_keyboardOwner(InvalidCanvasIndex),
m_cursorController(cursorController),
m_hoveredWidget(nullptr),
m_keyboardOwner(nullptr),
m_world(std::move(world))
{
m_canvas = this;
@@ -61,12 +61,12 @@ namespace Ndk
WidgetBox& entry = m_widgetBoxes[index];
entry.cursor = entry.widget->GetCursor();
if (m_cursorController && m_hoveredWidget == &entry)
if (m_cursorController && m_hoveredWidget == index)
m_cursorController->UpdateCursor(Nz::Cursor::Get(entry.cursor));
}
inline void Ndk::Canvas::SetKeyboardOwner(BaseWidget* widget)
inline void Canvas::SetKeyboardOwner(std::size_t canvasIndex)
{
m_keyboardOwner = widget;
m_keyboardOwner = canvasIndex;
}
}