fix: social panel completion batch (user gate 2026-08-13, "fix all")
One user-ordered batch across the FA social panel + world selection.
Every root cause was probe-proven before the fix (new
ProbeSocialClickRouting in SocialPanelLiveMountProbeTests - production
window mount + real UiRoot hit-tests + a synthetic click):
1. STUCK CHECKBOXES (fellowship x4, allegiance x1, "always checked /
can't change any options"): the authored checkboxes carry DAT
ToggleBehavior, so UiButton SELF-FLIPS Selected at MouseUp - the old
handlers read the flipped value and wrote the ORIGINAL back, snapping
every click to where it started (the probe recorded (id, oldValue)).
Fix: SuppressSelfToggle (the CH6a/b mirror discipline) + derive the
next value from the STORE; the per-tick seeding mirrors it back.
2. UNCLICKABLE ROSTER ROWS ("only get the move window cursor"): the row
name text is display-text ClickThrough=true, which the hit-test walk
skips regardless of HandlesClick - the wired OnClick was unreachable.
Fix: UiText.OnClick assignment now clears ClickThrough (central,
documented); the stats text gains the same select handler so most of
the row's width selects the fellow.
3. TRUNCATED EMPTY-STATE ("You do not belong... To create MISSING"):
the authored string resolves COMPLETE (three sentences) but embedded
'\n's rendered as one clipped line. DatWidgetFactory now splits
authored strings into one Line per newline, with the provider still
re-reading DefaultColor live (the state-color contract - caught by
BuildText_AuthoredLineTracksStateFontColor).
4. FELLOW NAMES WHITE (user-directed): the AD-82 invented leader-gold +
selection-blue tints are deleted; names always white (register row
narrowed).
5. ALLEGIANCE HEADER LABELS: bare "0"/"0" -> "Followers: N" / "Rank: [N]"
(user-specified format; the full retail StringInfo composition stays
AD-85's gap), monarch block matching.
6. FRIENDS/SQUELCH LIVE (AD-79 mostly retired): Add friend (name box ->
0x0018, retail clears the box - Request_AddFriend @0x0048D240),
Remove (row-click selection -> 0x0017), Appear Offline (CharacterOption
0x27 via the immediate 0x0005 auto-save, ACE pushes FriendStatusChanged
to your friend-of list), Squelch Character/Account add-by-name
(0x0058 guid0/type AllChannels + 0x0059) and Remove for the selected
row. The wire beneath (builders, WorldSession sends, Runtime commands,
parsers) existed end-to-end since J4.1/FA1 - this is panel wiring only
(docs/research/2026-08-13-social-wire-completion.md, committed here).
Send Tell stays inert (not in the order; AD-79's remainder).
7. WORLD SELF-SELECTION ("clicking my own char should select myself"):
retail has NO self-exclusion (CPhysicsPart::Draw @0x0050D823 arms
every physobj; RecvNotice_SmartBoxObjectFound @0x004E5BAE selects
unconditionally) - the includeSelf gate was an unregistered
divergence, now removed on both the left-click and right-click paths.
Element roles were probe-measured, never guessed (Add 0x10000514 /
Remove 0x10000515 / Send Tell 0x10000516 / Appear Offline 0x1000052C /
name field 0x1000051B; Squelch: field 0x10000540, Remove 0x10000547,
Squelch Character 0x1000054B, Squelch Account 0x1000054C).
Register: AD-79 mostly retired, AD-82 narrowed. Known remainder, filed
not hidden: the fellowship page's authored 600px content vs the 362px
viewport leaves Dismiss/Assign-Leader below the fold until the window is
resized taller (probe-measured; candidate follow-up).
Tests: Checkbox_Click fact rewritten to the mirror contract (both
directions), monarch-followers label updated, includeSelf expectation
updated, probe extended (click routing, synthetic click, action-widget
role dump). App suite 4,976/3 skips.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
ec2a7b0cce
commit
72ceddce2e
15 changed files with 1018 additions and 65 deletions
|
|
@ -421,10 +421,16 @@ public sealed class SocialAllegiancePageController
|
|||
if (tooltip is not null)
|
||||
_ignoreRequestsCheckbox.TooltipText = tooltip;
|
||||
|
||||
// 2026-08-13 gate fix ("can't press Ignore Allegiance requests —
|
||||
// always checked"): identical double-toggle to the fellowship page's
|
||||
// checkboxes — the authored ToggleBehavior self-flip made the old
|
||||
// `!Selected` read the flipped value and write the ORIGINAL back.
|
||||
// Same CH6a/b mirror discipline: suppress the self-flip, derive the
|
||||
// next value from the STORE, per-tick seeding mirrors the outcome.
|
||||
_ignoreRequestsCheckbox.SuppressSelfToggle = true;
|
||||
_ignoreRequestsCheckbox.OnClick = () =>
|
||||
{
|
||||
bool next = !_ignoreRequestsCheckbox.Selected;
|
||||
_ignoreRequestsCheckbox.Selected = next;
|
||||
bool next = !_bindings.CurrentCharacterOption(CharacterOptionId.IgnoreAllegianceRequests);
|
||||
_bindings.SetCharacterOption(CharacterOptionId.IgnoreAllegianceRequests, next);
|
||||
};
|
||||
}
|
||||
|
|
@ -518,8 +524,12 @@ public sealed class SocialAllegiancePageController
|
|||
private void RefreshSelfBlock(RuntimeAllegianceSnapshot snapshot)
|
||||
{
|
||||
SetLine(_selfName, ref _lastSelfName, snapshot.AllegianceName, TextColor);
|
||||
SetLine(_selfFollowers, ref _lastSelfFollowers, snapshot.TotalVassals.ToString(), TextColor);
|
||||
SetLine(_selfRank, ref _lastSelfRank, snapshot.Rank.ToString(), TextColor);
|
||||
// 2026-08-13 gate ("On top it just says 0 then 0"): the bare numbers
|
||||
// gain their labels in the user-specified format — the full retail
|
||||
// StringInfo composition for these fields remains AD-85's gap; this
|
||||
// is its user-directed partial fill.
|
||||
SetLine(_selfFollowers, ref _lastSelfFollowers, $"Followers: {snapshot.TotalVassals}", TextColor);
|
||||
SetLine(_selfRank, ref _lastSelfRank, $"Rank: [{snapshot.Rank}]", TextColor);
|
||||
}
|
||||
|
||||
// gmAllegianceUI::UpdateMonarchData @0x00491B40 — see class doc.
|
||||
|
|
@ -541,10 +551,11 @@ public sealed class SocialAllegiancePageController
|
|||
|
||||
RuntimeAllegianceMemberSnapshot monarchData = monarch!.Value;
|
||||
SetLine(_monarchName, ref _lastMonarchName, monarchData.Name, TextColor);
|
||||
// 2026-08-13 gate: same label treatment as the self block's followers.
|
||||
SetLine(
|
||||
_monarchFollowers,
|
||||
ref _lastMonarchFollowers,
|
||||
(snapshot.TotalMembers >= 1u ? snapshot.TotalMembers - 1u : 0u).ToString(),
|
||||
$"Followers: {(snapshot.TotalMembers >= 1u ? snapshot.TotalMembers - 1u : 0u)}",
|
||||
TextColor);
|
||||
_monarchField.Enabled = monarchData.IsLoggedIn;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue