From f74b8177af2520ecd8af8aa0b607c98dd47121e2 Mon Sep 17 00:00:00 2001 From: Clifford Garwood Date: Sun, 19 Jul 2026 19:10:08 -0400 Subject: [PATCH] fix(imex): repaint plate-selector icon when a plate's slice-ready state flips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The big upstream merge replaced the old per-idle unconditional plate-selector toolbar refresh with a dirty flag (Plater::mark_plate_toolbar_image_dirty), which the geometry-change sites already set. PartPlate::update_slice_result_valid_state flips a plate's slice-ready / IMEX blocked-plate ("naughty plate") state without any geometry change and did not set the flag, so after the merge nothing repaints that plate's thumbnail or warning badge — the old per-idle refresh used to mask it. Mark the toolbar image dirty when the state actually changes, matching the established pattern. Cosmetic; no effect on slicing. Surfaced by the merge review of 58b4a68a10. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/slic3r/GUI/PartPlate.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 6c228460ce..3b43f4bed3 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -4608,12 +4608,19 @@ void PartPlate::update_states() void PartPlate::update_slice_result_valid_state(bool valid) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": plate %1% , update slice result from %2% to %3%") % m_plate_index %m_slice_result_valid %valid; + const bool changed = (m_slice_result_valid != valid); m_slice_result_valid = valid; if (valid) m_slice_percent = 100.0f; else { m_slice_percent = -1.0f; } + // This flips the plate's slice-ready / IMEX blocked-plate state without a geometry change, + // so the plate-selector thumbnail/warning badge must be repainted explicitly. Upstream + // replaced the old per-idle unconditional toolbar refresh with this dirty flag, so nothing + // else repaints the naughty-plate icon otherwise. + if (changed && m_plater) + m_plater->mark_plate_toolbar_image_dirty(); } // IMEX firmware-managed zones: compute the plate-local primary-zone center and push it