diff --git a/crates/benilla-app/assets/ui/CharacterFrame.xml b/crates/benilla-app/assets/ui/CharacterFrame.xml index 0c7306b5..4e132926 100644 --- a/crates/benilla-app/assets/ui/CharacterFrame.xml +++ b/crates/benilla-app/assets/ui/CharacterFrame.xml @@ -12,10 +12,12 @@ defined in `UiPanels.xml:507-563` (battle-tested by Merchant/QuestLog, 0138) — reused here, not redefined. - Docks the left UIPanel slot exactly like Gossip/Merchant/Quest/QuestLog (`UiPanels.xml` - `UIPanelWindows["CharacterFrame"] = { area = "left", pushable = 0 }`, mirroring the - ref's own `CharacterFrame` row, `UIParent.lua` pin cited in `UiPanels.xml`'s header) — so it - competes for/replaces those windows, never stacks with them. `ToggleCharacter(tab)` (ref + Docks the left UIPanel slot (`UiPanels.xml` `UIPanelWindows["CharacterFrame"] = + { area = "left", pushable = 2, whileDead = 1 }`, the ref's own `UIParent.lua l.19` row — + decision 1507; pushable was wrongly 0 from 0208 until then). pushable=2 means it does NOT + simply replace the NPC-session windows: a pushable-0 window opening under it slides this + sheet to the CENTER seat (vendor left, your equipment beside it), and showing this over a + pushable-0 occupant parks it at center likewise. `ToggleCharacter(tab)` (ref `CharacterFrame.lua:3-23`) is the show/hide/tab-switch entry point; the app's 'C' binding calls it (`ui_script/mod.rs`). diff --git a/crates/benilla-app/assets/ui/QuestLogFrame.xml b/crates/benilla-app/assets/ui/QuestLogFrame.xml index db53e289..ed9a5c3b 100644 --- a/crates/benilla-app/assets/ui/QuestLogFrame.xml +++ b/crates/benilla-app/assets/ui/QuestLogFrame.xml @@ -13,7 +13,8 @@ construction regardless (`widget/mod.rs`'s ctor comment). Docks the left UIPanel slot exactly like Gossip/Merchant/Quest (`UiPanels.xml` - `UIPanelWindows["QuestLogFrame"] = { area = "left", pushable = 0 }`, pin §8's + `UIPanelWindows["QuestLogFrame"] = { area = "left", pushable = 0, whileDead = 1 }` + (whileDead carried since 1507), pin §8's `UIParent.lua l.25` quote) — so it competes for/replaces those windows, never stacks with them. UNLIKE those windows this is not an NPC session: no `CloseX()` on hide, no range guard; it is durable player state the app can push at any time (`benilla-ui`'s `quest_log.rs` module diff --git a/crates/benilla-app/assets/ui/UiPanels.xml b/crates/benilla-app/assets/ui/UiPanels.xml index 9489f19f..d0233f85 100644 --- a/crates/benilla-app/assets/ui/UiPanels.xml +++ b/crates/benilla-app/assets/ui/UiPanels.xml @@ -11,36 +11,51 @@ reference's window arbitration (a different number is a different window order), and the `UISpecialFrames` seeds. The code around that data is ours. - Scope: `left`, `center` and `full` are all live. `doublewide` and `UIChildWindows` are not - — nothing benilla ships wants them — but the registration table keeps their exact shape so - a later row drops in unchanged. **`UISpecialFrames` is not ours to write into** (decision - 1206): it is the table an ADDON puts its own window in, and 34 corpus call sites do. + Scope: `left`, `center` and `full` are all live, and so is `UIChildWindows` (decision 1507 + — all four of the reference's child windows ship now). `doublewide` is not — its one 1.12 + tenant is the auction house, which benilla doesn't ship — but the registration table keeps + its exact shape so a later row drops in unchanged. **`UISpecialFrames` is not ours to write + into** (decision 1206): it is the table an ADDON puts its own window in, and 34 corpus call + sites do. Rows are keyed by the frame names we actually ship. Most of those ARE the reference's own (`GossipFrame`, `MerchantFrame`, `LootFrame`); where ours differs, the row is `Benilla*` and its comment names the reference row it stands in for. -->