Merge branch 'hotfix_ui_update' into 'master'

Fix Lua UI updates

See merge request OpenMW/openmw!3936
fix-osga-rotate-wildly
psi29a 10 months ago
commit b5b6744321

@ -54,7 +54,7 @@ namespace LuaUi
if (!ext->isRoot()) if (!ext->isRoot())
destroyWidget(ext); destroyWidget(ext);
else else
ext->widget()->detachFromWidget(); ext->detachFromParent();
} }
void detachElements(WidgetExtension* ext) void detachElements(WidgetExtension* ext)
@ -62,14 +62,14 @@ namespace LuaUi
for (auto* child : ext->children()) for (auto* child : ext->children())
{ {
if (child->isRoot()) if (child->isRoot())
child->widget()->detachFromWidget(); child->detachFromParent();
else else
detachElements(child); detachElements(child);
} }
for (auto* child : ext->templateChildren()) for (auto* child : ext->templateChildren())
{ {
if (child->isRoot()) if (child->isRoot())
child->widget()->detachFromWidget(); child->detachFromParent();
else else
detachElements(child); detachElements(child);
} }
@ -272,12 +272,13 @@ namespace LuaUi
void Element::create(uint64_t depth) void Element::create(uint64_t depth)
{ {
assert(!mRoot);
if (mState == New) if (mState == New)
{ {
assert(!mRoot);
mRoot = createWidget(layout(), true, depth); mRoot = createWidget(layout(), true, depth);
mLayer = setLayer(mRoot, layout()); mLayer = setLayer(mRoot, layout());
updateRootCoord(mRoot); updateRootCoord(mRoot);
mState = Created;
} }
} }
@ -304,8 +305,8 @@ namespace LuaUi
} }
mLayer = setLayer(mRoot, layout()); mLayer = setLayer(mRoot, layout());
updateRootCoord(mRoot); updateRootCoord(mRoot);
mState = Created;
} }
mState = Created;
} }
void Element::destroy() void Element::destroy()

@ -112,6 +112,12 @@ namespace LuaUi
ext->widget()->attachToWidget(widget()); ext->widget()->attachToWidget(widget());
} }
void WidgetExtension::detachFromParent()
{
mParent = nullptr;
widget()->detachFromWidget();
}
WidgetExtension* WidgetExtension::findDeep(std::string_view flagName) WidgetExtension* WidgetExtension::findDeep(std::string_view flagName)
{ {
for (WidgetExtension* w : mChildren) for (WidgetExtension* w : mChildren)

@ -35,6 +35,7 @@ namespace LuaUi
bool isRoot() const { return mElementRoot; } bool isRoot() const { return mElementRoot; }
WidgetExtension* getParent() const { return mParent; } WidgetExtension* getParent() const { return mParent; }
void detachFromParent();
void reset(); void reset();

@ -378,7 +378,7 @@ local function onSettingChanged(global)
local value = common.getSection(global, group.key):get(settingKey) local value = common.getSection(global, group.key):get(settingKey)
local settingsContent = groupElement.layout.content.settings.content local settingsContent = groupElement.layout.content.settings.content
auxUi.deepDestroy(settingsContent[settingKey]) -- support setting renderers which return UI elements auxUi.deepDestroy(settingsContent[settingKey]) -- support setting renderers which return UI elements
settingsContent[settingKey] = renderSetting(group, group.settings[settingKey], value) settingsContent[settingKey] = renderSetting(group, group.settings[settingKey], value, global)
groupElement:update() groupElement:update()
end) end)
end end
@ -408,7 +408,7 @@ local function onGroupRegistered(global, key)
local element = groupElements[group.page][group.key] local element = groupElements[group.page][group.key]
local settingsContent = element.layout.content.settings.content local settingsContent = element.layout.content.settings.content
settingsContent[settingKey] = renderSetting(group, group.settings[settingKey], value) settingsContent[settingKey] = renderSetting(group, group.settings[settingKey], value, global)
element:update() element:update()
end)) end))
end end

Loading…
Cancel
Save