Files
eepp/docs/articles
Martín Lucas Golini d27eae5927 Harden accessibility lifecycle, events and native backends
Teardown and identity:
- Detach native backends before scene children are destroyed and clear
  mRoot afterwards, fixing a use-after-free when an AT-SPI client is
  connected while a window closes.
- Invalidate a deleted widget's subtree once, top-down, before OnClose
  handlers run (NODE_FLAG_DESTROYING). Descendants never walk into
  destroyed parents, and deleted identities cannot be re-registered.
- Closing scenes expose no accessibility manager through either accessor.
- Deleting widgets no client has seen allocates no identity and emits no
  events.
- Ignore events from widgets not yet attached to a scene.

Events:
- Keep the order of state and structural events; coalesce only adjacent
  query-again hints.
- Stop emitting per-widget BoundsChanged; bounds are queried on demand.
- Report the Focused state and keyboard focus only on the projected focus
  owner, through a shared helper used by both paths.

Model views:
- Lazy child count and child queries, cached sibling indexes, selection
  and hit testing without enumerating rows.
- Row identities follow inserted and removed rows; removed rows are
  pruned from native wrapper caches.
- Expose the active cell editor as the child of the row or cell it edits.

AT-SPI:
- Correct state bits (EXPANDABLE/EXPANDED, SENSITIVE, CHECKABLE,
  SELECTABLE, READ_ONLY, SINGLE/MULTI_LINE, SELECTABLE_TEXT) and the
  password-text and panel roles.
- Emit text-changed insert/delete, caret-moved and selection-changed
  events, diffed once per frame. Support line granularity,
  SetCaretOffset and selection editing.
- Track clients by bus name so the active flag clears on disconnect.
- Fix the I/O thread busy-spin and stranded dispatch backlog, flush
  queued signals, and type-check Properties.Set values.

UIA:
- Raise focus only for the focused element.
- Defer UiaDisconnectProvider out of widget destruction.
- Keep providers alive for in-flight cross-thread requests.
- Reject unknown interfaces without a UI-thread round trip.
- Require window-specific client activity.

macOS:
- Avoid repeated full node info builds.
- Use sibling indexes and lazy child access.
- Fix label/value deduplication for list items.

Tests and docs:
- Add regression tests for focus ownership, teardown, event ordering,
  lazy model identities, nested scenes and cell editors.
- Extend the AT-SPI validation scripts and document the current
  performance characteristics and limitations.
2026-10-09 00:06:36 -03:00
..

eepp articles

Use this page to find the guide for the task you are doing. The articles explain eepp's supported behavior; class headers and current source code remain the reference for API details.

Task Start here Follow up with
Build a first UI with XML and CSS UI introduction Application UI authoring
Create or change an application screen Application UI authoring Native layout reference, CSS for application UI
Look up a CSS property, selector, or value CSS specification CSS for application UI when styling native widgets
Render HTML or Markdown content HTML compatibility layer CSS specification for supported properties and values
Preview and edit native XML/CSS layouts UI editor Application UI authoring, Runtime UI inspector
Inspect or automate a running UI Runtime UI inspector Application UI authoring for a layout debugging workflow
Bind application data or commands to widgets UI data binding Application UI authoring for screen structure
Make native widgets accessible UI accessibility Application UI authoring for screen structure
Add an interactive chart UI charts Application UI authoring for placement and sizing
Work on eterm Kitty support Keyboard protocol, graphics protocol The corresponding src/modules/eterm/ implementation and tests

Native application widgets and HTML documents have different layout behavior. Start with application UI authoring for toolbars, dialogs, forms, and editor windows; start with HTML compatibility for UIWebView and UIMarkdownView.