diff --git a/components/lua_ui/element.cpp b/components/lua_ui/element.cpp index 8181c1da83..738bf5228b 100644 --- a/components/lua_ui/element.cpp +++ b/components/lua_ui/element.cpp @@ -190,8 +190,8 @@ namespace LuaUi assert(!mRoot); if (!mRoot) { - mRoot = createWidget(mLayout, 0); - mLayer = setLayer(mRoot, mLayout); + mRoot = createWidget(layout(), 0); + mLayer = setLayer(mRoot, layout()); updateAttachment(); } } @@ -200,16 +200,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; @@ -217,9 +217,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 1387a1b51e..8151b4f88c 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; @@ -34,10 +34,11 @@ namespace LuaUi void attachToWidget(WidgetExtension* w); void detachFromWidget(); - private: - Element(sol::table layout); - static std::map> sAllElements; - void updateAttachment(); + private: + Element(sol::table layout); + sol::table layout() { return mLayout.as(); } + static std::map> sAllElements; + void updateAttachment(); }; }