Skip to content

Standardize all dialogs: native (wx.MessageDialog) or web (existing accessible WebView) — kill hand-rolled custom dialogs; fixes onboarding crash + #72 #73

@taylorarndt

Description

@taylorarndt

Product area

UI / dialogs, accessibility, onboarding

Severity

P1 — a startup crash plus inconsistent, hand-rolled dialogs

Summary

Quill has ~15 dialog classes and 39 raw wx.Dialog(...) usages across 8 UI files. Many are hand-rolled custom dialogs with their own focus, keyboard, and button handling — which is where bugs keep appearing (focus landing on the wrong control, buttons that don't behave, and at least one startup crash). We should standardize on two dialog kinds and delete the bespoke ones:

  • Native (wx.MessageDialog / wx.MessageBox) for confirms, saves, and simple messages. Reliable button handling, read directly by VoiceOver/NVDA.
  • Web (the existing wx-accessible-webview surfaces) for anything that displays rich content or captures input. Reuse what we already ship — AccessibleChatView is the web-input pattern (the Ask Quill chat), AccessibleHtmlDialog for display, MarkdownPreviewDialog for previews. No new component needed.

Bugs this fixes / folds in

  • Startup crash: on a fresh profile, after the "Ready. Tip: press Ctrl+Shift+P" status is announced, the first-run onboarding sequence crashes (reported on both Windows and macOS, with a screen reader active). The crash is almost certainly in one of the hand-rolled onboarding dialogs (show_startup_wizard_page → profile/assistant/speech/watch-folder prompts). Converting these removes the crasher.
  • [Bug]: the last step of onboarding opens a raw html file. #72 — the last onboarding step opens a raw HTML document in an editor tab (open_welcome_guide puts HTML/markdown straight into a Document). It should render in a web surface instead. This issue supersedes [Bug]: the last step of onboarding opens a raw html file. #72.
  • Sticky-note editor focus lands on Save instead of the text field; it should be a web form (title + body) following the chat pattern.

Dialog inventory & target

Keep (already correct): AskQuillChatDialog (web chat), MarkdownPreviewDialog (web), unsaved-changes prompt (now native wx.MessageDialog), delete-note confirm (native).

→ Web (display or input):

  • StickyNoteEditorDialog, StickyNotesVaultDialog (quill/ui/sticky_notes.py)
  • RunPythonDialog, PromptStudioDialog, AgentCenterDialog, WritingAssistantDialog, SearchableModelPickerDialog, AIHubDialog, AssistantConnectionDialog (quill/ui/assistant_tools.py)
  • AIModelDialog (quill/ui/ai_model_panel.py), TrainStyleDialog (quill/ui/style_panel.py)
  • onboarding/welcome (render, don't dump raw HTML)

→ Native wx.MessageDialog: trust-consent prompt, untrusted-location, and the assorted confirm prompts in quill/ui/main_frame.py.

Decide case-by-case: CommandPaletteDialog (search + list picker) — likely web for consistent screen-reader behavior.

Acceptance

  • No hand-rolled wx.Dialog subclasses remain for confirm/message flows; those use wx.MessageDialog/MessageBox.
  • Input/display dialogs use the existing accessible web surfaces (chat/html/preview) — reusing AccessibleChatView, not a new component.
  • First-run onboarding completes without crashing on Windows and macOS with a screen reader on.
  • [Bug]: the last step of onboarding opens a raw html file. #72: welcome/onboarding content renders, not raw HTML.

Metadata

Metadata

Labels

bugBug report or confirmed defect.

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions