toddy-iced
Vendored fork of iced maintained for the Toddy UI project. Tracks iced's master branch with additional features. Version numbers are independent of upstream iced releases.
What's different from upstream iced
Accessibility
- Full accessibility tree via AccessKit (Linux AT-SPI2, Windows UI Automation, macOS NSAccessibility)
- Accessible properties on all built-in widgets: role, label, description, value, live regions, orientation, relationships (labelled-by, described-by), and more
- Alt text support for Image and SVG widgets
- RadioGroup widget with proper radio group semantics (single Tab stop, arrow key navigation, active descendant tracking)
- Form validation, modal, busy, hidden, and read-only properties
- Alt-key mnemonics mapped to AccessKit keyboard shortcuts
Keyboard navigation
- Tab/Shift+Tab focus cycling across all interactive widgets
- Ctrl+Tab unconditional focus escape from any widget
- Focus-visible pattern (focus ring on keyboard navigation only, not on mouse clicks)
- Keyboard activation: Button (Space/Enter), Checkbox (Space), Radio (Space), Toggler (Space), Slider (arrows, Home/End, Page Up/Down), PickList (arrows, Enter/Space, Escape), ComboBox (arrow navigation with Escape state preservation, Tab autocomplete, Enter/Tab select from dropdown)
- Keyboard scrolling: Page Up/Down, arrows, Home/End; Shift swaps to horizontal axis
- Scroll-into-view on Tab navigation with nested scrollable cascade (properly handles backward scrolling and scrollbar overlap)
- Scroll bubbling through ancestor scrollables with tree-wide directional fallback
- PaneGrid keyboard pane switching (F6/Shift+F6)
- Modal dialog focus trapping via scoped focus operations
- Alt-key mnemonic activation with synthetic click injection
- Escape-to-unfocus with layered dismissal (widget first, then container)
Framework APIs
runtime::keyboardmodule with backend-agnostic keyboard handlers for custom event loops- Scoped focus operations (
focus_next_within,focus_previous_within) for modal and dialog patterns - Mnemonic lookup operation for Alt+letter widget activation
- Accessibility selectors in
iced_testfor headless a11y testing focus_color,focus_border_color,focus_shadow,focus_shadow_subtlepalette helpers for consistent focus indicators- TextEditor undo/redo (Ctrl+Z/Ctrl+Y, Cmd on macOS)
- TextInput/TextEditor
input_purposefor IME hints - Markdown
code_themefor syntax highlighting themes find_focusedruntime operation- Runtime font loading at any time (not just startup)
Removed from upstream
- macOS URL scheme handling (
event::listen_url,ReceivedUrlsubscription event). Upstream iced uses a forked winit to support macOS deep links / custom URL schemes. This fork switches to upstream winit from crates.io, which doesn't include that feature. We'd like to support it once upstream winit does.
Crate naming
All crates are published under a toddy-iced- prefix. Cargo's
package aliasing means Rust source code still uses use iced::*
-- the renaming is entirely in Cargo.toml.
License
MIT -- same as upstream iced.