2.1 KiB
2.1 KiB
Non-Blocking Native Dialogs
Working implementation plan for the production-readiness defect discovered during live acceptance
of collaborative file safety. Opening an rfd picker synchronously from an egui/Bevy system stops
window event processing long enough for Hyprland to report Blacksite as unresponsive.
Scope
- Add one project-level native-dialog broker with a typed intent, one active dialog, background native work, and a main-thread result queue.
- Convert scene open/save-as, asset import/export, prefab save/source selection, subscene selection, conflict Save As, diagnostics export, and project-launcher folder selection to the broker.
- Keep destructive or stateful application logic on the Bevy main thread after a path result is received. Background work may only own the native dialog and its returned paths.
- Show a stable pending state and reject duplicate dialog requests while a picker is active.
- Replace blocking native dirty-scene confirmation dialogs with an editor-owned modal when the scene-transition state machine can preserve the original action exactly.
Contract
- The editor continues rendering and processing compositor pings while a native dialog is open.
- Cancel returns a typed empty result and does not mutate editor state.
- A result is applied once to the intent that created it; stale or duplicate results cannot run.
- Paths are validated at the same ownership boundary as before. The dialog broker does not read, write, import, save, or canonicalize project content.
- Existing collaborative revision guards remain authoritative after Save As selection.
- Project-launcher dialogs use the same broker before the full editor plugin group is active.
Verification
- Focused tests cover request exclusivity, cancel, one-shot result delivery, and typed intent preservation.
- Source-only workspace formatting, check, strict Clippy, and tests run; packaged acceptance remains deferred by project-owner direction.
- Native Wayland QA opens representative file, folder, and Save As dialogs under Hyprland and confirms the Blacksite window remains responsive without an unresponsive-application prompt.