Initialize COM for application-owned Wine accessibility objects

This commit is contained in:
Storm Dragon committed 2026-10-10 12:41:45 -04:00
1 parent 25e38907d3
commit 6976c83294
4 files changed
+84 -3

No files matched your search

+35
View File
@@ -16,6 +16,12 @@ items; escaped ampersands; duplicate menu selections and reopening; restored
button focus; and exiting with both reader capabilities disabled. Additional
`WM_MENUSELECT` messages exercise duplicate notifications deterministically.
The menu fixture also returns an application-owned MSAA object through
`WM_GETOBJECT`/`LresultFromObject`. The separate helper must retrieve its
`client` role through COM; native text fallback cannot satisfy the check.
This catches missing COM initialization that ordinary Wine control proxies
and the native menu hook did not expose.
The fixture window takes focus and closes automatically. Cleanup stops only
the Wine server for the temporary prefix. The recorded events never reach the
running reader's speech or braille service.
@@ -32,6 +38,35 @@ live listening or physical braille acceptance.
32-bit hook support, entirely custom menus without `WM_MENUSELECT`, and full
object review are outside the current implementation.
## BARD Express managed menus
The October 10 investigation found two independent blockers. The helper's
message-loop thread did not initialize COM, so application-owned MSAA queries
failed with `CO_E_NOTINITIALIZED` and used native window text such as `MenuBar`.
The helper now initializes a single-threaded COM apartment before registering
callbacks and uninitializes it after removing them. The new marshaled-provider
check passes with the fix and fails with the previous helper.
BARD's prefix also registered `IAccessible` against UIA type library
`{930299CE-9965-4DEC-B0F4-A54848D4B667}`, version `1.0`, while its installed
`uiautomationcore.dll` lacked the registered resource `3`.
An initialized read-only query failed with `TYPE_E_CANTLOADLIBRARY`.
After backing up the prefix registry, the 32-bit and 64-bit
`HKLM\Software\Classes\Interface\{618736E0-3C3D-11CF-810C-00AA00389B71}\TypeLib`
registrations were pointed to the loadable standard accessibility type library
`{1EA4DBF0-3C3B-11CF-810C-00AA00389B71}`, version `1.1`.
Read-only inspection then retrieved Account/View/Help and their command labels,
shortcuts and unavailable states from the open application. This repair is
specific to a verified prefix mismatch; the helper does not change registries.
After installing the helper, restart Cthulhu to load it. In BARD, press Alt,
move Left/Right among Account, View and Help, then Down/Up among commands.
Check unavailable items while working offline and Escape back to the main
screen. Recheck Tab/Shift+Tab through buttons, preferences and login fields,
including password exclusion, and ordinary Wine Notepad menus/editing.
Verify audible speech and physical braille separately; querying menu labels
alone does not establish either output gate.
## Editor and actual Notepad checks
The CMake build also includes a small MSAA state decoder check. Run it with