feat(ui): centralize retained window lifecycle

This commit is contained in:
Erik 2026-07-10 21:31:18 +02:00
parent 4bb37e302e
commit 6e9e10367f
12 changed files with 778 additions and 57 deletions

View file

@ -225,17 +225,17 @@ text; full suite green; user visual gate.
### 2.1 Introduce `RetailWindowManager` and typed handles
- [ ] Add `RetailWindowHandle` and lifecycle events: `Shown`, `Hidden`, `Moved`,
- [x] Add `RetailWindowHandle` and lifecycle events: `Shown`, `Hidden`, `Moved`,
`Resized`, `Closed`, `LockChanged`.
- [ ] Move named-window registry/raise policy behind `RetailWindowManager`; retain
- [x] Move named-window registry/raise policy behind `RetailWindowManager`; retain
thin `UiHost` forwarding APIs for callers.
- [ ] Define `IRetainedPanelController : IDisposable` with idempotent `OnShown`,
- [x] Define `IRetainedPanelController : IDisposable` with idempotent `OnShown`,
`OnHidden`, and optional descendant-focus notification, without coupling `UiRoot`
to game/network semantics.
- [ ] Make `UiRoot` emit visibility, descendant-focus, and pointer-capture changes;
- [x] Make `UiRoot` emit visibility, descendant-focus, and pointer-capture changes;
the handle owns outer-frame geometry/opacity and the controller owns panel-specific
reactions.
- [ ] On hide/unregister, clear descendant focus, capture, modal ownership, drag
- [x] On hide/unregister, clear descendant focus, capture, modal ownership, drag
state, and default text input. Remove the max/min button from any shared close-id
convention; each controller binds close and maximize explicitly.