diff --git a/src/graphics/ui/elements/UINode.cpp b/src/graphics/ui/elements/UINode.cpp index 85347b9a8..918d30b65 100644 --- a/src/graphics/ui/elements/UINode.cpp +++ b/src/graphics/ui/elements/UINode.cpp @@ -376,14 +376,14 @@ void UINode::setGravity(Gravity gravity) { } } -bool UINode::isSubnodeOf(const UINode* node) { +bool UINode::isDescendantOf(const UINode* node) { if (parent == nullptr) { return false; } if (parent == node) { return true; } - return parent->isSubnodeOf(node); + return parent->isDescendantOf(node); } void UINode::getIndices( diff --git a/src/graphics/ui/elements/UINode.hpp b/src/graphics/ui/elements/UINode.hpp index a7b18390c..4f6145f08 100644 --- a/src/graphics/ui/elements/UINode.hpp +++ b/src/graphics/ui/elements/UINode.hpp @@ -290,7 +290,7 @@ namespace gui { virtual void setGravity(Gravity gravity); - bool isSubnodeOf(const UINode* node); + bool isDescendantOf(const UINode* node); /// @brief collect all nodes having id static void getIndices( diff --git a/src/logic/scripting/lua/libs/libgui.cpp b/src/logic/scripting/lua/libs/libgui.cpp index 389bedc9a..dc4806d00 100644 --- a/src/logic/scripting/lua/libs/libgui.cpp +++ b/src/logic/scripting/lua/libs/libgui.cpp @@ -165,6 +165,13 @@ static int l_container_set_interval(lua::State* L) { static int l_move_into(lua::State* L) { auto node = get_document_node(L, 1); auto dest = get_document_node(L, 2); + if (dest.node == nullptr) { + return 0; + } + if (dest.node->isDescendantOf(node.node.get())) { + luaL_error(L, "unable to move element to its descendant"); + return 0; + } UINode::moveInto( node.node, std::dynamic_pointer_cast(dest.node) );