Add native Wine accessibility bridge
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
# Tolk NVDA Presence Compatibility Design
|
||||
|
||||
> Superseded by `docs/wine-accessibility.md`, which uses the original NVDA Controller clients and
|
||||
> a native RPC server instead of replacement controller DLLs.
|
||||
|
||||
## Goal
|
||||
|
||||
Allow applications running under Wine or Proton to use the official upstream `Tolk.dll` unchanged while routing Tolk speech through the existing Linux NVDA-to-Cthulhu path.
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
# Wine Accessibility
|
||||
|
||||
Cthulhu's Wine integration has three components:
|
||||
|
||||
1. `WineAccessibility`, a built-in plugin which discovers same-user Wine and Proton prefixes.
|
||||
2. `cthulhu-wine-access.exe`, a Wine-hosted helper built with Winegcc.
|
||||
3. The `org.stormux.Cthulhu1.Service` D-Bus interface used by the helper and Prism.
|
||||
|
||||
The manager starts one helper per prefix, uses `WINEPREFIX` or
|
||||
`STEAM_COMPAT_DATA_PATH/pfx`, and passes the prefix's own loader through `WINELOADER`. Discovery
|
||||
requires an actual Wine loader process, so exported prefix variables and idle `wineserver`
|
||||
processes do not keep helpers alive. A helper is stopped after its prefix has been idle for ten seconds. Repeated early exits use exponential
|
||||
restart backoff. If an actual NVDA window already exists in the prefix, the helper exits and yields
|
||||
to it.
|
||||
|
||||
## Controller Compatibility
|
||||
|
||||
The helper registers the current `NvdaCtlr.<session>.<desktop>` local RPC endpoint, the legacy
|
||||
`NvdaCtlr` endpoint used by older official controller clients, and the Controller 1, 2, and 3
|
||||
interface UUIDs. It also creates the `wxWindowClassNR` / `NVDA` window used
|
||||
by official Tolk releases for detection. Therefore applications can keep the original
|
||||
`nvdaControllerClient32.dll`, `nvdaControllerClient64.dll`, and `Tolk.dll`; no DLL override is
|
||||
required.
|
||||
|
||||
Plain speech, braille, cancel, and process ID calls are implemented. Speaking-state queries return
|
||||
`ERROR_CALL_NOT_IMPLEMENTED`, because Cthulhu's current speech backend does not expose an accurate
|
||||
answer. SSML is validated by Cthulhu and currently fails with `ERROR_NOT_SUPPORTED`. This is
|
||||
intentional: accepting SSML while dropping mark callbacks or reporting completion too early would
|
||||
violate the Controller 2 contract.
|
||||
|
||||
The current Meson target builds the 64-bit helper. A 32-bit helper requires a 32-bit Winegcc and
|
||||
32-bit GLib/GIO development environment and should be shipped by multilib packaging.
|
||||
|
||||
## Standard Dialog Reading
|
||||
|
||||
The first reader stage listens for MSAA focus, name, value, state, and selection events. This makes
|
||||
ordinary Win32 dialogs and controls useful. It does not expose custom-drawn, DirectX, or
|
||||
game-specific interfaces. UI Automation coverage and an AT-SPI object broker remain separate later
|
||||
stages; the current helper presents normalized events directly through Cthulhu.
|
||||
|
||||
## Prism
|
||||
|
||||
Prism has a distinct `Cthulhu` backend ID. Native applications call Cthulhu's D-Bus service
|
||||
directly. Wine builds use Prism's Winelib D-Bus bridge. This backend supports speech, braille,
|
||||
combined output, and cancellation without claiming to be Orca.
|
||||
Reference in New Issue
Block a user