fix #379: chat opacity fade was scoped to every window, not just chat

Root cause: RetailWindowOpacityController applied the Default/Active
opacity fade to EVERY registered UiRoot window (vitals, toolbar,
inventory, spellbook, radar, even the Options panel itself), but
retail's ChatInterface::SetDefaultOpacity/SetActiveOpacity are only
ever called by gmMainChatUI/gmFloatyChatUI — the mechanism is chat-only
in retail, not a global window-opacity feature.

Fix: scope the controller's catch-up loop, OnWindowRegistered,
ReapplyAll, and Dispose to WindowNames.Chat/ChatWindow1-4 only; every
other registered window now stays fully opaque regardless of slider
position, matching retail's own scope. Regressed by
RetailWindowOpacityControllerTests.
OpacityFade_AppliesOnlyToChatWindows_NeverOtherPanels (registers
vitals/toolbar/chat/a floating chat window and asserts the non-chat
windows never move off 1.0 while chat windows still track Default/
Active correctly).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-11 23:00:57 +02:00
parent c121842664
commit c0b3d8f233
4 changed files with 177 additions and 56 deletions

View file

@ -427,10 +427,24 @@ chat windows already read when deciding which lines to show.
### Opacity sliders — live drag, linked, never clamping
**Gate-4 re-test note (#379) — step 4 below is REWRITTEN:** the sliders
previously faded EVERY registered window (vitals, toolbar, inventory,
spellbook, radar, the Options panel itself, ...), not just chat windows —
matching retail's own bug-for-bug scope. They now affect ONLY the main
chat window and the four floating chat windows, exactly like retail's
`ChatInterface::SetDefaultOpacity`/`SetActiveOpacity` (which only
`gmMainChatUI`/`gmFloatyChatUI` ever call). **Use a chat window (main or
floating), not the toolbar/vitals/another panel, as your "other window" in
step 4** — a non-chat window's opacity should now stay FIXED (opaque)
regardless of the slider position.
4. **Drag the FIRST slider (Default Opacity) most of the way to the right**
while the Options panel itself is NOT focused/hovered by your mouse (so
you can see another registered window, e.g. the toolbar or a floating
chat window, at its UNFOCUSED opacity). Watch that OTHER window's
you can see another CHAT window — the main chat window or a floating
chat window 1-4 — at its UNFOCUSED opacity; a NON-chat window like the
toolbar or vitals bar must stay fully opaque throughout this whole
section, per the #379 note above). Watch that other CHAT window's
transparency change LIVE, continuously, as you drag — not just on
release. This is retail's `SetCurrentValue -> Apply(1)` immediate-apply
semantic.