Preserve scenario viewport when editing a diagram message

This commit is contained in:
2026-09-06 05:43:56 +03:00
parent c6c07cc3a3
commit ae1602ad7a
3 changed files with 46 additions and 8 deletions
+8 -4
View File
@@ -1221,8 +1221,11 @@ pub fn view<'a>(app: &'a App, owner: Id, mut out: Column<'a, Message>) -> Elemen
}
}));
let pending = app.behavior.has_pending();
// Keep the canvas at a stable widget-tree position when a form replaces
// the palette, so Iced retains the user's current sequence viewport.
let mut controls = column![].spacing(12);
if !pending {
out = out
controls = controls
.push(
row![
action("+ Lifeline", event(Event::Start(owner, Tool::Lifeline))),
@@ -1252,7 +1255,7 @@ pub fn view<'a>(app: &'a App, owner: Id, mut out: Column<'a, Message>) -> Elemen
MessageStyle::CallReply
};
if !pending {
out = out.push(
controls = controls.push(
row![
button("Select / reorder")
.on_press(Message::ScenarioCanvas(CanvasEvent::Choose(
@@ -1296,14 +1299,15 @@ pub fn view<'a>(app: &'a App, owner: Id, mut out: Column<'a, Message>) -> Elemen
]
.spacing(6),
);
out = out.push(label(if matches!(tool, CanvasTool::Message(_)) {
controls = controls.push(label(if matches!(tool, CanvasTool::Message(_)) {
"Draw message · choose the highlighted sequence position on a lifeline, then click or drag to another lifeline · Escape cancels"
} else { "Select a lifeline or occurrence · drag the selected occurrence’s ↕ handle to reorder within its sequence" }));
} else {
out = out.push(label(
controls = controls.push(label(
"Pending form · the canvas remains visible · apply or cancel below",
));
}
out = out.push(controls);
let mut scene = Scene::sequence(p, owner, app.selected);
scene.interaction = Some((
context,
+13 -4
View File
@@ -204,12 +204,21 @@ logs desktop{-clippy,-release}-dfd2e41.log in Linux target/linux-verification.
Semantic core/source5 checkpoint346fb24 passed345 core tests (one intentional
ignored probe) and strict Clippy; independent nine-finding recheck is closed.
Semantic checkout server test checkpointc746ab6 passes42 existing server tests
and strict Clippy after seven current-output assertions changed to5. Semantic API
production additions were rejected twice by automatic approval review; a direct
authorization question is pending. No API route bodies were retained. Spec work
continues independently. Process direct editing is active in codex/process-direct.
and strict Clippy after seven current-output assertions changed to5. User explicitly reconfirmed REST work after two automatic review rejections.
The scoped retry is approved; semantic query/preview/apply and HTTP tests are
implemented, with independent transport review and schema validation active.
Normative source5 spec02f99a9 passed strict generation and extracted examples;
independent no-op-guarantee finding was fixed in29df024. Process direct editing is active in codex/process-direct.
Next: verify scenario UI fixes on Windows/Linux; integrate semantic core/source,
spec and authorized API; implement semantic GUI; integrate direct process editing.
Broader coverage/lifecycle/hosted/help/release gates in PLAN remain active. Main
is4101434 (docs pointer on productiona8f451e); this integration is not yet accepted.
Latest native refinement c6c07cc: pinned actions/mode feedback/names pass normal
and compact Windows inspection. Native ALT creation, operand pair insertion,
correlation spans, invalid order, Save/Undo/Redo passed (saved62 objects). Canvas
remount on entering/leaving forms loses the viewed region; stable controls sibling
fix is being verified next. Exact evidence is in release-scenario-editing.md.
Linux287 tests/strict Clippy/release passed c6c07cc. Process7a1e12b passes303 desktop
tests; independent Exchange-first continuation finding is being fixed by worker.
+25
View File
@@ -256,3 +256,28 @@ inner and outer scrolling. Root is refining those three issues before accepting
the milestone. ALT/reuse/resize/save recovery and Linux native remain pending.
Root UI refinement checks:287 desktop tests passed, strict all-target desktop Clippy passed, optimized Windows desktop build passed. Native verification of this refinement remains pending.
## Refined Windows native results and viewport finding
c6c07cc Windows frozen binary SHA256
4A49AD95C466BACBD1D1EA96FFF983BDA2F5DA9B7DCCBF91C387655CEF88B419,
ui-scenario-refined-windows. Native1440x900 and1100x700 show differentiated tool
selection, occurrence-first message names and pinned Create/Cancel. A pending
Navigation outcome ALT fragment retained its name and route.available guard across
width/height resizing. Create produced the fragment and two operands. Native
click-click in its first operand explicitly captured that operand's append slot;
Available route plus correlated Reply were created on Navigation request. Execution
bar ends at that reply. Reply-before-call reorder rejects with reply_order. Save
All writes62 objects/5 links/3 checks; exact nested source shows the guarded operand
contains only that correlated pair. Undo removes both (60); Redo restores saved62.
The saved native trial was closed before the next refinement.
Native also found the canvas jumps to its start whenever the palette is replaced
by a form or restored. Diagnosis: conditional siblings change its Iced widget-tree
position. Group the controls as one stable sibling and verify that actual viewport
is retained across drawing/form/cancel/create. This is distinct from deliberate
new-selection reveal (not implemented yet). Linux287 tests, strict Clippy and
optimized build pass for c6c07cc; native Linux remains pending.
Stable-canvas refinement:287 desktop tests, strict all-target Clippy and optimized Windows build passed. Native retention trial remains pending.