Harden Wine standard control support
This commit is contained in:
@@ -10,15 +10,16 @@ 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.
|
||||
restart backoff. If an actual NVDA window already exists in the prefix, the helper yields the
|
||||
controller endpoint to it while continuing to provide standard-dialog reading.
|
||||
|
||||
## 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
|
||||
by official Tolk releases for detection. The compatibility window is explicitly hidden,
|
||||
nonactivating, and excluded from ordinary window switching. Therefore applications can keep the original
|
||||
`nvdaControllerClient32.dll`, `nvdaControllerClient64.dll`, and `Tolk.dll`; no DLL override is
|
||||
required.
|
||||
|
||||
@@ -33,10 +34,16 @@ The current Meson target builds the 64-bit helper. A 32-bit helper requires a 32
|
||||
|
||||
## 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.
|
||||
The first reader stage listens for MSAA focus, name, value, state, and selection events. When Wine's
|
||||
MSAA proxy has no useful data for a standard control, the helper falls back to the control's Win32
|
||||
class and message protocol. Combo boxes, list boxes, edits, buttons, sliders, and static controls can
|
||||
therefore expose useful names, roles, values, and states without replacing the MSAA path for controls
|
||||
which already read correctly.
|
||||
|
||||
This class-based fallback is adapted from the LGPL `wine-a11y` reader published by Mudb0y.
|
||||
|
||||
The reader does not expose custom-drawn, DirectX, or game-specific interfaces. UI Automation coverage
|
||||
and an AT-SPI object broker remain separate later stages.
|
||||
|
||||
## Prism
|
||||
|
||||
|
||||
Reference in New Issue
Block a user