fix: Keep the window draggable while a design opens (#643)

The loading box was a full-window modal whose backdrop covered the custom title bar. It is now a light overlay under the title bar, so dragging, snapping, resizing and the window buttons keep working during open, import and recovery. The timeline rebuild shows feature N of M, and Cancel or Esc stops it at the next feature (solidcraft_doc::progress). Recovery restore now runs off the window thread too. A control or MCP doc.open or import is answered once the file is in and doesn't block frames; edits sent meanwhile wait their turn. The web build still opens in place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-13 06:59:20 -04:00
1 parent 8be0f64f5a
commit 392fae1af4
11 files changed
+734 -125

No files matched your search

+4 -8
View File
@@ -94,14 +94,10 @@ pub fn show(app: &mut SolveApp, ctx: &egui::Context) {
app.recoverable.insert(0, e);
return;
}
if app.run("doc.recover", json!({"id": e.id, "dir": dir_s})).is_ok() {
// Ours now: autosave it under this app's entry before the old entry goes.
let kept = app.autosave.as_mut().map(|a| a.save(&app.session));
if let Some(Ok(_)) = kept {
let _ = app.run("doc.recovery_discard", json!({"id": e.id, "dir": dir_s}));
}
app.set_status(format!("recovered {}: save it to keep it", e.name), false);
}
// Rebuilt off the window thread like any other file; once it is in, it is
// autosaved under this app's entry before the old entry goes.
let kind = crate::file_load::Kind::Recover { id: e.id.clone(), dir: dir_s };
let _ = crate::file_load::begin_request(app, crate::file_load::Request::new(&e.name, kind));
} else {
let _ = app.run("doc.recovery_discard", json!({"id": e.id, "dir": dir_s}));
}