fix(ui): button property 0x0D was never "disabled", and it killed every Journal button
Reported symptom: Abandon, New, Record, Start, First and Last all unclickable.
That Abandon was in the list is what identified it — Abandon is deliberately
unwired, so if it behaved the same as the others the cause could not be wiring.
UiButton read authored property 0x0D as "starts disabled" (Enabled = !0x0D).
It was the one property read in that file with no citation, and it was wrong.
Every button on the Journal panel authors 0x0D, so every one built disabled:
visible, because drawing never consults Enabled, and unclickable, because
UiElement.HitTest skips disabled elements. Exactly the reported shape.
The evidence is a sweep of every installed layout (LayoutDump gained --ghosted
for it): 85 elements author 0x0D and ALL 85 author it TRUE — not one False
anywhere in the client — and no panel ever clears it, the only four
SetAttribute_Bool(.., 0xd, ..) sites in the binary being chargen appearance,
the keymap option and the barber. A flag that is only ever true, never cleared,
and sits on New, Record, Start, Delete and Reset cannot mean "dead button";
under the old reading 85 elements were permanently dead in a shipping game.
It is not a pure ghosted LOOK either, which is why this ignores it rather than
moving it to appearance: the same 85 mix live buttons with inert column headers
("Contract", "Status", "Title", "Timer", "Label", "#"), and one appearance
cannot be right for both. Registered as QJ-2 with the measurement, so the open
question is recorded rather than quietly decided.
The test that asserted the old behaviour carried no citation either — it
encoded the same assumption. It now asserts the evidenced behaviour, with a
companion test proving the state machine's own Ghosted transition still
suppresses a click: that mechanism is separate and did not change.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c5cc8ae5fc
commit
73a04244e7
4 changed files with 84 additions and 4 deletions
|
|
@ -142,8 +142,21 @@ public class UiButtonTests
|
|||
}
|
||||
|
||||
[Fact]
|
||||
public void DisabledProperty_SelectsGhostedAndSuppressesClick()
|
||||
public void Property0x0DDoesNotDisableTheButton()
|
||||
{
|
||||
// This test previously asserted the opposite, encoding the same
|
||||
// uncited assumption the constructor made: that 0x0D means "starts
|
||||
// disabled". Measured across every installed layout
|
||||
// (LayoutDump --ghosted), 85 elements author 0x0D and ALL 85 author it
|
||||
// TRUE — never once False — and no panel ever clears it: the only
|
||||
// SetAttribute_Bool(…, 0xd, …) sites in the whole binary are chargen
|
||||
// appearance, the keymap option and the barber.
|
||||
//
|
||||
// A flag that is only ever true, never cleared, and sits on New,
|
||||
// Record, Start, Delete and Reset cannot mean "dead button". Reading
|
||||
// it that way made every button on the Journal panel visible but
|
||||
// unclickable, because drawing ignores Enabled while
|
||||
// UiElement.HitTest skips disabled elements.
|
||||
var info = ButtonInfo("Normal", "Ghosted");
|
||||
AddBoolProperty(info, 0x0Du, true);
|
||||
var b = CreateButton(info);
|
||||
|
|
@ -151,8 +164,24 @@ public class UiButtonTests
|
|||
|
||||
b.OnEvent(new UiEvent(0, b, UiEventType.Click));
|
||||
|
||||
Assert.True(b.Enabled);
|
||||
Assert.True(_clicked);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void AnExplicitGhostedStateStillSuppressesTheClick()
|
||||
{
|
||||
// The state machine's own Ghosted transition is a separate mechanism
|
||||
// from the authored 0x0D property and is NOT what changed — a panel
|
||||
// that deliberately ghosts a button still gets a dead button.
|
||||
var info = ButtonInfo("Normal", "Ghosted");
|
||||
var b = CreateButton(info);
|
||||
b.OnClick = () => _clicked = true;
|
||||
|
||||
b.TrySetRetailState(UiButtonStateMachine.Ghosted);
|
||||
b.OnEvent(new UiEvent(0, b, UiEventType.Click));
|
||||
|
||||
Assert.False(b.Enabled);
|
||||
Assert.Equal("Ghosted", b.ActiveState);
|
||||
Assert.False(_clicked);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue