fix(imex): key the resolved tool roster and fw-managed flag in the zone/ghost cache

Review follow-up. Removing pem from the ghost cache key also removed its
accidental role as the key's only printer-identity signal: the resolved
active-tools string (roster + primary) and imex_firmware_managed_zones both
shape the baked zone/ghost set but were never keyed directly, so a printer
swap between presets with matching mode names and topology could leave a
stale ghost set. Key all three in build_imex_cache_key, which also hardens
the zone cache against the same pre-existing gap.

Also from review: the tooltip swatch reuses the pem/map its label already
hoisted (one resolution, not two); the bake constructs ghosts with no color
at all, making update_imex_ghost_colors the sole color author; the headless
!m_plater guard is documented as the wxGetApp sentinel it is.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Clifford Garwood
2026-08-14 16:54:48 -04:00
co-authored by Claude Fable 5
parent 28c0c681fe
commit 8a5bc75e7b
2 changed files with 23 additions and 10 deletions
+3 -1
View File
@@ -20293,7 +20293,9 @@ Plater::ImexGhostTooltip Plater::format_imex_ghost_tooltip(int physical_head) co
return t;
}
t.filament_slot_1based = logical + 1;
t.swatch = plate->get_imex_head_filament_color(physical_head);
// Reuse the pem/map already hoisted above so label and swatch are derived
// from one resolution, not two.
t.swatch = plate->get_imex_head_filament_color(physical_head, pem, map);
t.swatch.a(1.0f); // tooltip swatch opaque
t.label = "T" + std::to_string(physical_head) +
" -> filament " + std::to_string(t.filament_slot_1based);