diff --git a/scripts/gui-ladder.py b/scripts/gui-ladder.py index 05227a24df..bac00a72c4 100644 --- a/scripts/gui-ladder.py +++ b/scripts/gui-ladder.py @@ -1060,12 +1060,11 @@ def rung_scale(): f"every cut-out is exactly {side:.6f} squared") # Now the part that matters: draw ONE more entity by hand, on top of all that. # - # The Escape is a WORKAROUND, not decoration: after a bulk sketch_add the next tool key and - # click are swallowed — the preview is drawn, its value field opens, and no entity is ever - # committed — until one Escape has been pressed. It is reachable only by mixing the socket - # into a live gesture session, which is exactly what this rung does. snaporca-j7gc; when that - # is fixed, delete this line and the rung must still pass. - key("Escape", 0.8) + # No Escape here, deliberately: this rung is the regression test for snaporca-j7gc, where a + # bulk sketch_add made while a creation tool is armed was read as a drawn gesture, opened that + # tool's value field and swallowed the next key and click until one Escape dismissed it. The + # gesture below has to land on the FIRST try. Fixed by resyncing m_autoedit_seen in + # add_entities_scripted; if this rung ever needs an Escape again, the bug is back. key("l", 0.8) global PACE PACE = 6.0 # a thousand entities re-solve between fields diff --git a/src/slic3r/GUI/CAD/DesignSketchTool.cpp b/src/slic3r/GUI/CAD/DesignSketchTool.cpp index 6193c8e7a9..2ded2ad4d2 100644 --- a/src/slic3r/GUI/CAD/DesignSketchTool.cpp +++ b/src/slic3r/GUI/CAD/DesignSketchTool.cpp @@ -8956,6 +8956,15 @@ int DesignSketchTool::add_entities_scripted(const std::vector& ent // scripted profile closed — a ring's last point IS its first point. infer_auto_constraints(base, 0.0, 0.0); resolve_live(); + // A scripted add is not a drawn gesture, and draw-then-edit must not fire for it. The render + // pass arms that on a jump in the entity count (see the m_autoedit_seen block in render()), + // so a bulk load made while a creation tool is armed selected the last scripted entity and + // opened that tool's value field — which freezes the canvas (on_mouse_impl returns early + // while m_awaiting_length) and swallows every letter (in_text includes inline_busy()). The + // symptom was that the first key and click after sketch_add did nothing until one Escape had + // dismissed the field. Resyncing the baseline here leaves an ALREADY open field alone; it + // only stops this add from being read as something the user just drew. snaporca-j7gc. + m_autoedit_seen = int(m_entities.size()); return base; }