diff --git a/components/lua_ui/element.cpp b/components/lua_ui/element.cpp index 3e9b1e6437..13877b2371 100644 --- a/components/lua_ui/element.cpp +++ b/components/lua_ui/element.cpp @@ -189,8 +189,8 @@ namespace LuaUi assert(!mRoot); if (!mRoot) { - mRoot = createWidget(mLayout, 0); - mLayer = setLayer(mRoot, mLayout); + mRoot = createWidget(layout(), 0); + mLayer = setLayer(mRoot, layout()); updateAttachment(); } } @@ -199,16 +199,16 @@ namespace LuaUi { if (mRoot && mUpdate) { - if (mRoot->widget()->getTypeName() != widgetType(mLayout)) + if (mRoot->widget()->getTypeName() != widgetType(layout())) { destroyWidget(mRoot); - mRoot = createWidget(mLayout, 0); + mRoot = createWidget(layout(), 0); } else { - updateWidget(mRoot, mLayout, 0); + updateWidget(mRoot, layout(), 0); } - mLayer = setLayer(mRoot, mLayout); + mLayer = setLayer(mRoot, layout()); updateAttachment(); } mUpdate = false; @@ -216,9 +216,11 @@ namespace LuaUi void Element::destroy() { - if (mRoot) - destroyWidget(mRoot); + if (!mRoot) + return; + destroyWidget(mRoot); mRoot = nullptr; + mLayout = sol::make_object(mLayout.lua_state(), sol::nil); sAllElements.erase(this); } diff --git a/components/lua_ui/element.hpp b/components/lua_ui/element.hpp index 8b3a9ef4e1..1aee1c0506 100644 --- a/components/lua_ui/element.hpp +++ b/components/lua_ui/element.hpp @@ -18,7 +18,7 @@ namespace LuaUi WidgetExtension* mRoot; WidgetExtension* mAttachedTo; - sol::table mLayout; + sol::object mLayout; std::string mLayer; bool mUpdate; bool mDestroy; @@ -36,6 +36,7 @@ namespace LuaUi private: Element(sol::table layout); + sol::table layout() { return mLayout.as(); } static std::map> sAllElements; void updateAttachment(); };