From cb24db29c227f3d8b5b33ddd5ff2de76b83aea06 Mon Sep 17 00:00:00 2001 From: kichikuou Date: Sun, 22 Mar 2026 10:49:52 +0900 Subject: [PATCH] PartsEngine: Fix state stuck at CLICKED when target state is uninitialized parts_set_state silently ignored transitions to uninitialized states, causing parts without a HOVERED state to remain in CLICKED after mouse release. Fall back through CLICKED -> HOVERED -> DEFAULT so the first initialized state is always selected. DEFAULT is accepted unconditionally as the terminal fallback, matching the original engine's behavior. --- src/parts/parts.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/parts/parts.c b/src/parts/parts.c index bce023a..890af92 100644 --- a/src/parts/parts.c +++ b/src/parts/parts.c @@ -881,7 +881,9 @@ bool parts_numeral_set_number(struct parts *parts, struct parts_numeral *num, in void parts_set_state(struct parts *parts, enum parts_state_type state) { - if (parts->state != state && parts->states[state].type != PARTS_UNINITIALIZED) { + while (state > PARTS_STATE_DEFAULT && parts->states[state].type == PARTS_UNINITIALIZED) + state--; + if (parts->state != state) { parts->state = state; parts_dirty(parts); }