1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-28 12:40:06 +00:00

Merge branch 'fix_ui_crashes' into 'master'

Another day, another UI crash fix

See merge request OpenMW/openmw!3949
This commit is contained in:
psi29a 2024-03-15 11:03:21 +00:00
commit 5d669f0470
2 changed files with 10 additions and 12 deletions

View File

@ -99,15 +99,6 @@ namespace LuaUi
element->create(depth + 1); element->create(depth + 1);
WidgetExtension* root = element->mRoot; WidgetExtension* root = element->mRoot;
assert(root); assert(root);
WidgetExtension* parent = root->getParent();
if (parent)
{
auto children = parent->children();
std::erase(children, root);
parent->setChildren(children);
root->widget()->detachFromWidget();
}
root->updateCoord();
return root; return root;
} }
@ -313,9 +304,8 @@ namespace LuaUi
{ {
if (mState != Destroyed) if (mState != Destroyed)
{ {
if (mState != New) if (mRoot != nullptr)
{ {
assert(mRoot);
destroyRoot(mRoot); destroyRoot(mRoot);
mRoot = nullptr; mRoot = nullptr;
} }

View File

@ -100,6 +100,8 @@ namespace LuaUi
void WidgetExtension::attach(WidgetExtension* ext) void WidgetExtension::attach(WidgetExtension* ext)
{ {
if (ext->mParent != this)
ext->detachFromParent();
ext->mParent = this; ext->mParent = this;
ext->mTemplateChild = false; ext->mTemplateChild = false;
ext->widget()->attachToWidget(mSlot->widget()); ext->widget()->attachToWidget(mSlot->widget());
@ -114,7 +116,13 @@ namespace LuaUi
void WidgetExtension::detachFromParent() void WidgetExtension::detachFromParent()
{ {
mParent = nullptr; if (mParent)
{
auto children = mParent->children();
std::erase(children, this);
mParent->setChildren(children);
mParent = nullptr;
}
widget()->detachFromWidget(); widget()->detachFromWidget();
} }