fix infinite recursion on moveInto used to move to descendant node

This commit is contained in:
MihailRis 2026-09-26 19:51:08 +03:00
parent f5de330f3f
commit 4f1411b005
3 changed files with 10 additions and 3 deletions

View file

@ -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(

View file

@ -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(

View file

@ -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<Container>(dest.node)
);