Commit Graph
138 Commits
Author SHA1 Message Date
Martín Lucas Golini 4baa4ae4b1 Split accessibility backends, fix CI regressions and document architecture
CI fixes for the previous commit:
- Windows: announce one BoundsChanged on the window root when the scene
  resizes, so UIA raises LayoutInvalidated again. Widgets still do not
  report their own bounds changes.
- macOS: collapse identical pending notifications per element within one
  update, so one text selection change posts a single
  AXSelectedTextChanged. Created/Destroyed keep every occurrence, in order.
- MinGW: link the UIA test harness with -municode and uuid, which fixes
  the nightly MinGW build.

Backends:
- Split the AT-SPI backend into a private header plus connection, events,
  tree/marshalling and method files. Break the 600-line D-Bus dispatcher
  into one handler per interface.
- Split the UIA backend into a private header plus core, element provider
  and text range files.
- Share hasState/hasAction in accessibilitybackend.hpp instead of three
  per-backend copies.

CI and docs:
- Run test_atspi.py --multi-window on Linux: closing a secondary window
  while an AT-SPI client stays connected.
- Add docs/articles/uiaccessibilityarchitecture.md (layer map, files,
  invariants, per-backend layout, common tasks, test matrix) and link it
  from the articles index and the accessibility guide.
- Add a unit test for the single layout notification on scene resize.
2026-10-09 01:02:11 -03:00
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
Martín Lucas Golini 5a4fb936f0 Merge branch 'develop' into feature/a11y 2026-10-08 10:04:08 -03:00
Martín Lucas Golini d49fe3fdc8 Add date and time pickers with calendar popups and HTML mappings
- Add CalendarDate, TimeOfDay, LocalDateTime and DateRange with Gregorian
  arithmetic, locale-aware formatting/parsing, ISO serialization and Unix
  timestamp conversions with explicit UTC offsets.
- Add UIDateTimeEdit, UIDatePicker, UITimePicker, UIDateTimePicker and
  standalone UICalendar, with XML/CSS registration and data binding.
- Support segmented keyboard editing, numeric entry, ISO paste, configurable
  steps, bounds, empty values and independent seconds/milliseconds display.
  Default time display to hours and minutes while preserving stored precision.
- Add day/month/year calendar navigation and a combined date-time popup with
  time steppers, live configuration updates and scoped event connections.
- Add Breeze and fallback theme styles with CSS-defined SVG icons, dp sizing,
  font-aware calendar dimensions and muted read-only/disabled controls.
- Map HTML date, time and datetime-local inputs to native controls with strict
  value sanitization, min/max/step/required/readonly/disabled handling,
  constraint validation and normalized form serialization.
- Provide private light HTML control defaults and intrinsic temporal sizing;
  prevent author CSS from styling anonymous implementation parts.
- Share popup placement and visibility helpers across pickers, dropdowns and
  trigger/cursor menus while retaining cascading-menu placement rules.
- Fix fractional grid wrapping and input cursor bubbling over child buttons;
  notify and refresh styles when editing permission changes.
- Reduce CSS registration allocations with string_view parameters and
  heterogeneous name lookup; inline frequently used node and CSS getters.
- Align CodeEditor default font sizing with text widgets without overriding
  application preferences.
- Add HTML form margin defaults and update the affected rendering baseline.
- Upgrade Windows ecode nightly builds to Ubuntu 24.04 and newer MinGW.
- Add picker documentation, an example and regression coverage for date math,
  locales, editing, popup placement/lifetime, HTML controls and pixel density
2026-10-06 01:13:44 -03:00
Martín Lucas Golini 387c83da8d Use much smaller chunks and hope for the best. 2026-10-02 20:09:53 -03:00
Martín Lucas Golini 4102c69eb3 Add dev boostrap script. 2026-10-02 11:06:31 -03:00
Martín Lucas Golini 29b7d10766 Improve splitting logic to upload the dev artifact. 2026-10-02 09:41:42 -03:00
Martín Lucas Golini b4290f288d Try again. 2026-10-02 01:16:05 -03:00
Martín Lucas Golini 30ae16666a Try fix arm64 build. 2026-10-02 00:54:56 -03:00
Martín Lucas Golini 8ff06ba3c4 Try to split the artifacts when package is bigger than 400MB. 2026-10-02 00:46:52 -03:00
Martín Lucas Golini da5de53fb1 Linux CI fix. 2026-10-02 00:01:25 -03:00
Martín Lucas Golini 2c8b9c2dc0 Build a eepp-dev-linux-x86_64 package (this will contain all build objects and binaries, allowing to just downloading this and make changes directly without having to recompile the whole thing). 2026-10-01 23:33:01 -03:00
Martín Lucas Golini 8d1d22ed5d Fix FreeBSD eproc process listing and build configuration
Use KERN_PROC_PROC so eproc shows one row per process instead of one
row per thread.

Select clang by default in Premake 4 and 5, add the required FreeBSD
library paths and links, and remove redundant CI compiler overrides.
Fix the Premake 4 BSD SONAME rule so eproc can find libeepp.so when
launched from the repository root.
2026-09-24 14:16:36 -03:00
Martín Lucas Golini 2008f8d6fc feat(ui): finalize cross-platform accessibility validation
- handle UIA text rectangle allocation and coordinate failures safely
  - run the native macOS accessibility lifecycle harness in CI
  - add public documentation for accessibility configuration, semantics, testing, and performance
  - replace the obsolete Windows validation report with the general accessibility guide
  - link the accessibility guide from the README
  - skip accessibility tests cleanly when no graphical display is available
2026-09-15 12:01:24 -03:00
Martín Lucas Golini 685f304d6f feat(accessibility): harden Windows UIA backend
- expose per-HWND fragment roots with safe WM_GETOBJECT subclassing
  - marshal UIA queries and actions onto the owning UI thread
  - stabilize provider identity, cache lifetime, and stale-node handling
  - implement selection, value, range, expand, scroll, and text patterns
  - add UTF-16 text ranges and native accessibility event delivery
  - add a Windows UIA validation harness and CI coverage
  - document lifecycle, performance, and compatibility results
2026-09-15 00:44:54 -03:00
Martín Lucas Golini d6d52032b0 Add accessibility performance regression coverage
- Add inactive and active accessibility benchmarks to protect against startup, notification, and AT-SPI scaling regressions.

  - Extend the AT-SPI benchmark with text, focus, action, value, geometry, hit-testing, and model-update operations. Run both benchmarks in Linux CI and preserve their JSON results as artifacts.

  - Add an explicit null accessibility backend for baseline measurements and optional accessibility disabling.

  - Harden the Windows UIA backend by caching client availability per update, validating root providers, and preventing recursive window procedure forwarding.
2026-09-11 14:57:16 -03:00
Martín Lucas Golini 5ffe6da00c Build ecode macOS nightly using frameworks (brew SDL2 is broken because it points to sdl2-compat, will fix later). 2026-09-01 03:06:56 -03:00
Martín Lucas Golini caba2d4462 Optimize bulk document insertion and IME location updates
Build multiline TextDocumentLine values once and move-insert them as a range, while batching client notifications under one lock.

Queue InputMethod location changes globally and flush only the latest rectangle at a configurable 50 ms interval. Keep backend calls on the main thread and avoid requests from unfocused text widgets. Use EEPP_IME_LOCATION_UPDATE_INTERVAL_MS to override the interval; 0 flushes once per rendered frame.

Add large multiline insertion coverage and document the remaining NewMultiFileDiffViewer performance work.

Enable Haiku x86_64 nightly builds
2026-08-29 22:21:55 -03:00
Martín Lucas Golini e619fb4048 Publish sdk to nightly tag too. 2026-08-22 18:33:11 -03:00
Martín Lucas Golini 2ec0dcc877 Fix macOS CI build script. 2026-08-22 17:54:22 -03:00
Martín Lucas Golini 7f0633afb6 Auto publish eepp sdk builds in nightlys and tagged releases (not tested beyond Linux, let's see...). 2026-08-22 17:44:26 -03:00
Martín Lucas Golini 33bba67dde Correct paddings in Glyph struct.
Disable Haiku build until beta6 vm.
2026-07-26 13:22:21 -03:00
Martín Lucas Golini 9894231d04 - Fixed emscripten build
- Added .github/workflows/eepp-emscripten-build-check.yml
  - Mirrors Linux CI structure.
  - Uses Premake 5 beta6.
  - Pins Emscripten 4.0.1.
  - Caches EMSDK system libraries.
  - Builds with all available cores.

- Completed Premake 5 Emscripten support:
  - Native wasm32 platform.
  - Correct .html application targets.
  - Asset preloading restored from Premake 4.
  - SDL2 supplied through Emscripten instead of native -lSDL2.
  - Static archives emitted under libs/emscripten/wasm32/.
  - Unsupported shared-library projects excluded.

- Modernized projects/emscripten/make.sh.
2026-07-25 00:47:18 -03:00
Martín Lucas Golini 513ef0f12b Move backward implementation to its own module but still have an special version for ecode. Integrate backward into unit-tests. 2026-07-13 11:00:35 -03:00
Martín Lucas Golini d4ddfd9e7e Try to recover stack trace from unit-tests in macOS CI. 2026-07-08 00:48:04 -03:00
Martín Lucas Golini e922d86c34 Investigate macOS unit-tests crash. 2026-07-03 11:03:45 -03:00
Martín Lucas Golini c0c28b9497 Try fix Android runner. 2026-06-29 21:02:42 -03:00
Martín Lucas Golini 4005d2ccc5 Fix MSBuild path. 2026-06-12 00:11:44 -03:00
Martín Lucas Golini d7807a1aa9 Ups fix Linux nightly env vars. 2026-05-23 17:49:54 -03:00
Martín Lucas Golini a90a003384 Update the Linux nightly. 2026-05-23 17:17:33 -03:00
Martín Lucas Golini da30372aae Remove concepts dependency, switch temporally Linux nightly to clang. 2026-05-03 19:40:56 -03:00
Martín Lucas Golini eafdb240ea Try an alternative. 2026-05-01 02:55:58 -03:00
Martín Lucas Golini 1cd57f3b65 Try fix issue with ubuntu ppa repo. 2026-05-01 02:17:13 -03:00
Martín Lucas Golini 926bf3102f Fixes for Haiku build. 2026-04-26 14:29:27 -03:00
Martín Lucas Golini 3715933d7a Fix folder not closing when a terminal has focus (SpartanJ/ecode#890).
Fix release notes in nightly.
2026-04-25 11:41:30 -03:00
Martín Lucas Golini 8fef89138b Change the Update Tag step in CI. 2026-04-21 17:07:23 -03:00
Martín Lucas Golini 9ccd79b2a7 Upgrade softprops/action-gh-release 2026-04-21 12:56:32 -03:00
Martín Lucas Golini eec7eeb284 Fix a possible dead-lock during closing.
Update to actions/checkout@v6.
2026-04-21 00:20:39 -03:00
Martín Lucas Golini e1f64d3d51 Tests should pass with these changes. 2026-03-29 01:04:50 -03:00
Martín Lucas Golini 8b111779a0 Some extra WIP for the HTML support, fixed layout calculation on HTML tables and rich text elements. Fixes in the demo, probably test won't pass yet (i cannot repro the failure!). 2026-03-28 23:14:28 -03:00
Martín Lucas Golini 08e62828b7 Try to catch the segmentation faults in linux unit tests. 2026-03-28 16:06:20 -03:00
Martín Lucas Golini d36c825074 Forgot installing premake5 in Haiku CI build. 2026-02-08 17:22:11 -03:00
Martín Lucas Golini 0c520fa9a7 Fix libsdl2_devel package name in Haiku CI build. 2026-02-08 17:06:25 -03:00
Martín Lucas Golini 7851181230 Add Haiku ecode nightly (not tested!). 2026-02-08 16:56:26 -03:00
Martín Lucas Golini 95c1392de6 Try fix FreeBSD nightlies (although it does seem an issue in the FreeBSD image). 2026-02-08 15:05:16 -03:00
Martín Lucas Golini 9d4fce4524 Implemented soft-wrap support in TextLayout.
Also fixed an old LineWrap::computeLineBreaks bug that wrapped too soon some texts, I had to update the tests (they where looking strange but I thought it was some unfortunate wrapping).
2026-01-25 00:26:54 -03:00
Martín Lucas Golini caebfc4d81 premake projects now enable text shaping by default. 2026-01-08 19:23:22 -03:00
Martín Lucas Golini d9d0a3539b A couple of minor changes. 2025-12-31 15:18:26 -03:00
Martín Lucas Golini 0af6de8bf2 Fix project paths in Android and iOS. 2025-12-31 14:48:00 -03:00
Martín Lucas Golini 2ce608ff09 Add Android and iOS CI (not tested). 2025-12-31 14:45:27 -03:00