fix(ui): restore retail vitals and window interactions
All checks were successful
CI / linux-portable (push) Successful in 3m16s
CI / windows-gate (push) Successful in 5m41s
CI / release (push) Successful in 2m5s

This commit is contained in:
Erik 2026-08-20 13:26:35 +02:00
parent 4d84456c21
commit 1bd2b30291
36 changed files with 1462 additions and 86 deletions

View file

@ -529,6 +529,8 @@ public sealed class RetailUiRuntime : IDisposable
// ChatInterface base-constructor values, 0x004F4550 — when no store is
// wired or nothing has been saved yet).
ChatSettings chatSettings = bindings.Chat.Store?.LoadChat() ?? ChatSettings.Default;
WindowLockPresentation = new RetailWindowLockPresentationController(
bindings.Host.Root.WindowManager);
WindowOpacity = new RetailWindowOpacityController(
bindings.Host.Root.WindowManager,
chatSettings.DefaultOpacity,
@ -643,6 +645,13 @@ public sealed class RetailUiRuntime : IDisposable
/// </summary>
public RetailWindowOpacityController WindowOpacity { get; }
/// <summary>
/// Global retail UI-lock chrome presenter. It is attached before the first
/// window mount so late registration observes the current lock state before
/// the window's first rendered frame.
/// </summary>
public RetailWindowLockPresentationController WindowLockPresentation { get; }
/// <summary>
/// Shared dat/sprite/font resolvers this runtime was built with.
/// Campaign CH user-gate round 3: lets a controller built OUTSIDE this
@ -903,7 +912,7 @@ public sealed class RetailUiRuntime : IDisposable
else if (_screenSizeSettling)
{
_screenSizeSettling = false;
_persistence?.RestoreAll(saveBack: false);
_persistence?.RestoreAfterDisplayChange();
}
Host.Draw(screenSize);
@ -4542,6 +4551,7 @@ public sealed class RetailUiRuntime : IDisposable
{
_characterSheetSubscription?.Dispose();
Host.WindowManager.WindowVisibilityChanged -= OnWindowVisibilityChanged;
WindowLockPresentation.Dispose();
WindowOpacity.Dispose();
if (SecureTradeController is { } trade)
{