Commit Graph
64 Commits
Author SHA1 Message Date
Storm Dragon cff2a47243 Releaseing for first tag. 2026.10.31 2026-10-31 00:14:01 -04:00
deedra 0763498472 Report foobar2000 Advanced settings check and radio states
Native tree descriptions previously omitted state-image bits. As a result,
foobar2000 Advanced Preferences read setting names without their boolean
values, and changing a checkbox without moving focus could go unnoticed.

Include TVIS_STATEIMAGEMASK in the native item key so polling observes
state changes even when Wine omits WinEvents. Report checked and not-checked
states for standard checkbox-tree images while preserving selected and
expanded/collapsed states. All queries remain read-only and retain the
existing target-architecture buffer layouts and bounded query behavior.

Foobar2000 also uses image indexes 3 and 4 for radio choices in its Advanced
settings tree. Expose those entries as radio buttons with the corresponding
check state. Restrict this application-defined mapping to foobar2000.exe
and its Preferences category/settings control identities. Leave unrelated
state images uninterpreted rather than inventing mixed checkbox states.

Extend the controls fixture with checkbox changes that emit no WinEvent,
custom images, and foobar-style radio transitions. Add a foobar-controls
runner mode using the application's basename. Exercise identical control
IDs and images under an unrelated basename to guard against applying the
compatibility mapping to other programs. Account for Wine initializing
checkbox images when the fixture first appears. Document support and the
manual Preferences acceptance procedure.

Validation:
- Controls and foobar-controls fixtures passed in both 64-bit and 32-bit.
- All six CTests passed: foreground focus, MSAA states, text limits,
  64/32-bit review capture, and hook safety.
- Existing menu and editor integrations passed, including Unicode,
  selection/deletion feedback, password exclusion and read-only controls.
- A private copy of foobar2000 2.26.1 exposed Advanced setting labels,
  numeric values, checkbox Space toggles and radio states, plus Components
  row names and version/module descriptions through the recording reader.
- Installed the verified helper alongside the Cthulhu session-bus fix;
  the user subsequently confirmed that the live changes look good.

Recorded events alone do not establish physical Braille acceptance. No
foobar2000 settings were changed in the user's live installation.
2026-10-25 14:57:34 -07:00
Storm Dragon 24c35d7954 Add ability to report version to cthulhu. 2026-10-24 15:08:19 -04:00
Storm Dragon 17052c5147 More fixes discovered based on Deedra's work. 2026-10-23 16:08:58 -04:00
Storm Dragon de31e5b513 Updated PKGBUILD and docs. 2026-10-23 12:37:12 -04:00
deedra e962fd0a78 Avoid callback stack overflow when snapshotting large Edit controls
Reading a large ANSI Edit control through GetWindowTextW sends a
WM_GETTEXT buffer through WH_CALLWNDPROC. Wine copies that UTF-16 buffer
onto the application's callback stack, exhausting a 1 MiB stack at about
516,000 code units and potentially leaving an exception status in the
cached snapshot length.

Query WM_GETTEXTLENGTH and WM_GETTEXT through the current window procedure
with CallWindowProcW instead. This avoids the message-hook buffer copy
while preserving ANSI/Unicode conversion and the application's subclass
chain. Reenter the busy accessibility subclass rather than calling
DefSubclassProc directly, which can consume callbacks needed to forward
the original edit message. Reject negative or oversized copy results and
discard the unusable buffer before its length can be used for indexing.

Extend the native hook-safety fixture for both 32-bit and 64-bit DLLs:
- Reserve a 1 MiB PE stack and install a real WH_CALLWNDPROC hook.
- Replace ANSI text with 516,000, 600,000 and 1,040,000 characters and
  verify the complete UTF-16 snapshot, its length and its terminator.
- Use short lines to avoid excessive paragraph-layout time.
- Keep a lower subclass installed and verify that the original text
  replacement still reaches it exactly once during the reentrant probe.

Document the reproduction, why direct hook invocation alone misses it,
and the remaining distinction between fixture coverage and live
MUSHclient acceptance.

Validation:
- Synchronized deedra with its upstream and origin/master; both were
  already up to date.
- cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=winelib-toolchain.cmake
- cmake --build build --parallel: passed.
- git diff --check: passed.
- xvfb-run -a ctest --test-dir build --output-on-failure: interrupted
  at the user's request to skip tests. Foreground-focus, msaa-states,
  review-capture64 and review-capture32 passed before interruption;
  hook-safety had started but has no completed result from this run.
- Further integration tests were skipped at the user's request.

Live MUSHclient behavior, audible speech and physical braille remain
unverified by this commit session. Human review and submission remain
the contributor's responsibility under the README policy.
2026-10-23 09:24:36 -07:00
Storm Dragon dbf3cebe88 Version bump. 2026-10-23 01:28:45 -04:00
Storm Dragon dcc68e87e2 Fix Orca extension startup and disable lifecycle
An approved and enabled Wine Access extension could remain completely
inactive: no Wine D-Bus endpoint was published and no helper was launched,
leaving even Wine Notepad silent. The extension implemented on_ready(),
on_enabled(), and on_disabled(), but the installed Orca 51 extension loader
does not invoke those callbacks.

Start Wine Access from set_up_commands(), which Orca's loader actually
calls, after preserving the base class setup and checking the disabled
state. Override disable() to remove timers, stop managed helpers, and
unpublish the endpoint before delegating to Orca's base implementation.
Keep on_shutdown() cleanup, the existing delayed bus startup retry, and
the guard against duplicate startup.

Add five lifecycle regression tests using an installed Orca's actual
extension loader, with helper launches, the bus, and timers mocked. Cover
startup and repeated setup, disabled extensions, delayed bus availability,
shutdown, and disabling both active and pending startup. Document how to
run these checks without changing the running reader.

The existing integration harness publishes its own endpoint and starts
the helper directly, while the API check only instantiates the extension
and checks APIs. Neither exercised normal extension startup, which let
this failure escape their coverage.

Validation:
- Before the fix, four of the five lifecycle tests failed; all five pass
  with the corrected callbacks:
  GSETTINGS_BACKEND=memory python3 orca/tests/test_lifecycle.py
- All 45 existing extension tests passed:
  python3 -m pytest orca/tests/test_presenter.py orca/tests/test_manager.py
      orca/tests/test_service.py orca/tests/test_review.py
- The installed-Orca API check passed:
  GSETTINGS_BACKEND=memory python3 orca/tests/orca_api_check.py
- A private D-Bus probe loaded the approved package through Orca's actual
  loader, verified delayed publication of the Wine interface and helper
  supervision timer, and verified loader shutdown cleanup.
- Existing Wine integration checks passed on a private display, session
  bus, and disposable prefix:
  dbus-run-session -- xvfb-run -a python3 orca/tests/integration_test.py
      --build-dir build
  These covered Notepad editing feedback, menus, save dialog controls and
  message, NVDA Controller speech/cancellation/braille calls, and helper
  shutdown after the prefix became idle. Recorded output does not prove
  physical braille or audible speech.
- After installing the fix, reapproving the extension, and restarting
  Orca, the user confirmed successful live use in three applications.
- git diff --check passed.
2026-10-23 01:25:58 -04:00
Storm Dragon 28dd2f02dc Version bump. 2026-10-22 01:33:55 -04:00
Storm Dragon 1149818590 Updated PKGBUILD. 2026-10-21 15:48:53 -04:00
Devin PraterandClaude Opus 5.5 418f671066 Add Orca extension for Wine accessibility
Publish the Wine Access protocol on Orca’s service connection and manage helpers per active Wine prefix. Add presentation, dialog capture, documentation, and tests.

Preserve the Cthulhu default and shared helper code. Document the single-reader limit and verify Orca cleanup leaves Cthulhu-managed helpers alone. Retain integration artifacts on exceptional failures.

Validation: 45 Orca unit tests passed; 11 existing test-environment checks passed; version metadata checks, Python compilation, and staged whitespace checks passed. Full Wine integration and live speech/braille remain unverified here because MinGW, Xvfb, and Orca are unavailable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 15:42:13 -04:00
Storm Dragon b57681d159 Updated AGENTS.md 2026-10-20 16:49:19 -04:00
Storm Dragon c02889b0f4 Merged changes from deedra. 2026-10-20 13:23:43 -04:00
deedra a3b88ea670 Document recovery from legacy Wine helper overwrites
Explain an installation mismatch confirmed while diagnosing missing
MUSHclient reading: an older helper bundled with Python Cthulhu replaced
the standalone launcher and Winelib sidecar, leaving native hook files
in the installation directory. The old helper still connected to the
reader service but did not start the native 32-bit menu/editor host.

Document how to distinguish a running helper from a complete standalone
installation, rebuild and install all five matching helper files, and
reload Cthulhu in its original desktop session. Include the requirement
to restart Wine applications when an older hook DLL remains loaded.
Point to existing isolated editor, controller, restart, and hook-safety
checks and the separate live speech/Braille acceptance requirements.

Validation for this documentation change:
- Reviewed the complete diff and ran git diff --check.
- Verified every installed helper file matches the standalone build.

Validation during the preceding installation repair:
- The old installed helper failed the isolated 32-bit editor check with
  missing character feedback; the current standalone build passed.
- Controller routing/SSML/service-loss checks passed.
- The 32-bit editor late-helper and helper-restart checks passed.
- Native hook-safety CTest passed for the actual hook DLLs.
- The reloaded helper exported WineReview, loaded its native 64-bit hook,
  and started the 32-bit host while the existing MUSHclient stayed open.
- The user confirmed that MUSHclient reading was restored. Physical
  Braille was not checked.

No helper source change was needed: the repaired installation uses the
existing standalone implementation. This commit preserves the recovery
procedure in tracked documentation.
2026-10-20 02:45:08 -07:00
Storm Dragon 16fe68d5bc Actually remembered to push the change to the public url instead of overwriting it and thinking it was fixed. lol 2026-10-19 23:12:57 -04:00
Storm Dragon 2dfd5b200a Merged from branch deedra after conflict fixes. 2026-10-19 22:52:05 -04:00
deedra 3474bb39c7 Bound native hook stack use and scope hooks to foreground threads
Ignored and reentrant Edit messages previously entered a callback whose
large text buffers increased stack use on every nested call. Menu hook
forwarding also reserved payload buffers for unrelated messages. The
64-bit helper additionally installed desktop-wide hooks, allowing
background UI threads to acquire subclasses and introducing synchronous
traffic through Wine's mixed-architecture global hook chain.

Move Edit processing and menu payload construction into non-inlined
handlers. Keep the forwarding callbacks small, retain the busy-state and
destruction guards, and preserve application subclass chaining and ANSI/
Unicode text handling.

Share foreground hook ownership between the Winelib helper and 32-bit
host. Attach both hooks only to the matching foreground UI thread,
release them when that thread changes, and retry incomplete attachment
as a pair. Preserve existing Edit subclasses across foreground changes
and release host hooks during shutdown.

Add native 32-bit and 64-bit stack-budget fixtures covering ignored and
busy reentrant messages, menu forwarding, nested text queries, application
subclasses before and after attachment, text input, and destruction during
a text change. Add a foreground-scope integration fixture that verifies
background exclusion, thread switching, detachment, and reattachment.
Keep hook debug symbols and frame pointers for native crash diagnosis,
and document installation and live acceptance requirements.

Validation:
- CMake configure and parallel build; git diff --check.
- Hook-safety CTest and foreground-scope fixtures for both architectures.
- Existing menu fixtures and Edit late-attachment/restart checks for both
  architectures, plus the 32-bit list fixture and reader-timeout test.

These checks exercise specific stack and hook-scope defects; they do not
establish the cause of the live MUSHclient stack overflow. Audible speech,
physical braille, and live MUSHclient acceptance remain separate checks.
2026-10-19 18:35:57 -07:00
Storm Dragon e0c83859f5 Battle.net installer now working. It crashes when the login page loads, but that seems to be fixed in upcoming version and the controls did read. 2026-10-16 12:26:59 -04:00
Storm Dragon 38358ad27a Updated PKGBUILD. 2026-10-15 18:10:38 -04:00
Storm Dragon 52a3fddc77 Bug fixes for reclaiming focus. 2026-10-15 13:39:39 -04:00
Storm Dragon ea509509e4 Better window detection for when a window regains focus. 2026-10-15 13:25:47 -04:00
Storm Dragon e3de71e594 Improved self-cleaning tests. 2026-10-15 13:12:15 -04:00
Storm Dragon 77db0b83ab Version and better logging added. 2026-10-15 12:49:33 -04:00
ak47 b16c6968ae Code optimization and bug fixes. 2026-10-14 20:55:28 -04:00
Storm Dragon 4c47cc5fc4 Merge branch 'deedra' 2026-10-14 20:13:11 -04:00
deedra b808c6686a Read command-history recalls in Wine edit fields
MUSHclient consumes queued Up/Down keys in PreTranslateMessage before the
Edit control receives WM_KEYDOWN. It recalls commands with SetWindowText
followed by SetSel at the end of the replacement. The editor subclass only
refreshed its snapshot for WM_SETTEXT, so the recalled command was silent
or followed by a stray character or blank from the caret update. Recalling
equal-length commands also leaves the final caret position unchanged.

Observe Up/Down for the focused standard Edit control in WH_GETMESSAGE,
excluding Ctrl-modified navigation. Associate the next successful
WM_SETTEXT with that retrieved key and announce the bounded recalled text
as an existing ordered text-read action. Report empty input as blank.
Consume the pending recall after the replacement and suppress the ensuing
EM_SETSEL feedback so each recalled command is announced once.

Reset recall tracking on subsequent retrieved messages, actual focus and
ordinary dispatched navigation. Preserve snapshot refreshes and normal
Left/Right reading after recalls. Keep password and foreground/focus
exclusion in place, leave unrelated programmatic text updates silent, and
check the control class before accessing the shared attachment property
so Scintilla's different state structure is untouched. Both native hook
architectures receive the fix through the existing build.

Extend the Edit fixture with application-side pretranslation of queued
history arrows. Assert the exact ordered feedback for Up/Down, equal-length
entries, rapid recalls, empty input and horizontal navigation afterward.
Require silence for unchanged history boundaries, unrelated programmatic
updates, protected fields and independently unprotected background fields.
Document history behavior and live MUSHclient acceptance steps.

Validation used a private Xorg dummy display, disposable Wine prefixes and
recording D-Bus services, with GUI checks run sequentially:

- cmake --build build --parallel
- ctest --test-dir build --output-on-failure: all four checks passed
- python3 tests/menu_integration.py --build-dir build --fixture edit
- The Edit check with --32-bit, --32-bit --late-helper, and
  --32-bit --restart-helper
- python3 tests/menu_integration.py --build-dir build --fixture winforms
  --32-bit
- python3 tests/menu_integration.py --build-dir build --fixture notepad
- python3 tests/menu_integration.py --build-dir build --fixture menu
  --32-bit
- git diff --check

The new 32-bit history regression failed against the original hook,
recording only blank actions, and passed with the fix. Final 32-bit,
64-bit and Windows Forms editor checks passed, including existing typing,
selection, deletion, Unicode, password and read-only assertions.

Built and installed the helper into the existing user-local installation,
backed up the previous five files and verified the installed artifacts.
The user subsequently confirmed that the installed fix works in MUSHclient.
Physical braille acceptance was not separately established.
2026-10-14 15:46:26 -07:00
Storm Dragon ed8c8e2467 Make wine-access more generic, not specifically cthulhu pathed. 2026-10-14 16:19:52 -04:00
Storm Dragon 417ee40dda Make the process of adding an orca extension easier. 2026-10-14 03:35:00 -04:00
Storm Dragon a8118c12cf Docs updated. 2026-10-14 03:11:58 -04:00
Storm Dragon 95cb78d3e4 Merge branch 'deedra'
Resolve tests/README.md by retaining both UIA notification and MSAA/reader reply stall guidance. Preserve master's notification hooks and Deedra's responsiveness fixes.

Validation: CMake configure/build, all four CTest checks, nine stall integration variants, 64-bit and 32-bit UIA notification checks, menus, 64-bit and 32-bit editing, actual Wine Notepad, and git diff --check. Live speech and physical braille acceptance remain pending.
2026-10-13 19:34:31 -04:00
Storm Dragon 6e92ad13d1 Updates for when prism doesn't behave. 2026-10-13 17:42:56 -04:00
deedra 7d3ac09ea1 Keep Wine editor feedback responsive during reader reply stalls
PresentAccessibleEvent previously waited synchronously for the reader on
Wine Access's message-loop thread. A slow D-Bus acknowledgment prevented
that thread from receiving subsequent WM_COPYDATA editor notifications.
The hooks time out after 50 ms, so feedback disappeared even though the
application accepted the input. With a 350 ms delayed focus reply, the
original helper inserted all of abbacdef but forwarded only e and f.

Move menu, editor and standard-control event delivery to one reader worker.
Keep a FIFO of at most 128 pending events, retain each variant and the bus
connection until delivery completes, and preserve focus-before-text order.
Keep the 500 ms reply deadline and cancel outstanding calls during normal
shutdown without making the event thread wait for the reader. Event-thread
success now means queued; controller RPC calls retain their synchronous
reader status behavior.

Retain the most recent focus dependency on the worker. After a transport
failure, re-establish that focus before sending dependent editor actions.
Treat a successful false reply as a completed exchange because filtering
can suppress presentation while still establishing focus. Never replay a
timed-out text action. Report transport failures, recovery and queue
overflow without including event contents in diagnostics.

Add a native editor fixture and a private-session D-Bus integration runner
for delayed replies, reply timeouts, failed initial focus, repeated typing,
event order, unchanged native text/caret, and shutdown with a withheld
reply. Wait for editor-hook attachment before triggering typing so the
32-bit companion is exercised reliably. Document queue behavior, limits,
regression commands and remaining live acceptance checks.

Validation performed sequentially on a private Xorg dummy display with
disposable Wine prefixes and recording reader services:

- cmake --build build --parallel
- python3 tests/reader_stall_integration.py --build-dir build
- The reader-stall check with --32-bit, --timeout, --focus-error, and
  --32-bit --focus-error
- ctest --test-dir build --output-on-failure: all four checks passed
- python3 tests/menu_integration.py --build-dir build with --fixture menu,
  edit, edit --32-bit, edit --restart-helper, notepad, controls, and
  list --32-bit
- python3 tests/event_stall_integration.py --build-dir build
- python3 tests/controller_integration.py --build-dir build
- git diff --check

The delayed-reply regression failed against the original synchronous
helper and passed after the worker change. The failed-focus scenario also
failed before dependency recovery was added and passed afterward.

These recordings establish the shared failure paths, not the cause of
every live MUSHclient pause or audible speech and physical braille
acceptance. Live checks remain for command typing, incoming plugin speech,
output-buffer arrows, menus, switching between Wine and Linux, reader
restart, and protected fields. An unavailable reader can still cause
feedback loss or bounded queue overflow.
2026-10-13 05:26:11 -07:00
deedra 27203b0512 Document MSAA stall handling and remaining Wine acceptance checks
Describe the single COM worker, bounded queues, focus invalidation, 500 ms
result expiry, native fallback, foreground filtering, owned-popup handling,
and shutdown behavior. State the limitation that a permanently blocked
provider occupies the one worker until helper exit.

Document the event-stall regression commands and their coverage: typing and
native button feedback during provider stalls, unchanged editor state,
late-focus suppression, bounded normal shutdown, unrelated background
providers, owned popups, both architectures, and the Orca endpoint.

Distinguish the supplied October 12 reader log from the confirmed shared
helper hang path. Successful D-Bus calls and clean reader shutdown do not
establish a reader crash, and synthetic provider stalls do not establish
the cause of every live MUSHclient failure. Keep command typing, incoming
plugin output, menus, output-buffer arrows, keypad review, audible speech,
and physical braille as explicit installed-helper acceptance checks.

Validation: reviewed the documented behavior against the worker, event
thread, and fixtures; git diff --check passed. Fresh CMake configure/build,
all four CTest checks, six event-stall runs, and eight existing menu/editor/
control/list fixture runs passed. GUI checks ran sequentially on a private
dummy Xorg display because Xvfb is unavailable; live speech and physical
braille checks were not performed.
2026-10-12 23:31:03 -07:00
deedra 0c69564780 Add regression fixtures for blocked Wine MSAA event providers
Add a MinGW fixture and isolated D-Bus runner that stall WM_GETOBJECT or
accessible text-property retrieval for eight seconds. While the provider
is blocked, a separate foreground editor must deliver repeated character
events and native button feedback without changing its text, caret, or
selection. Reject stale focus after the blocked provider returns and verify
normal WM_QUIT shutdown completes before a second provider stall ends.

Cover both 64-bit and 32-bit applications, ordinary property-getter stalls,
background focus events that must not query providers or retire foreground
feedback, and owned nonactivating accessible popups that preserve native
focus. Support the alternate Orca recording endpoint as well as Cthulhu.

Use disposable Wine prefixes and recording services so these checks do not
send speech or braille to the running reader. Compile fixtures with the
matching MinGW C++ compiler and clean up the test processes and prefix's
Wine server when each run finishes.

Validation, run sequentially on a private dummy Xorg display (:94):
- cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE=winelib-toolchain.cmake
- cmake --build build --parallel
- ctest --test-dir build --output-on-failure (4/4 passed)
- python3 tests/event_stall_integration.py --build-dir build, repeated with
  no extra option, --32-bit, --getter, --background, --popup, --reader orca
  (all six runs passed)
- python3 tests/menu_integration.py --build-dir build --fixture <fixture>,
  for menu, edit, controls, and list, each with and without --32-bit
  (all eight runs passed)
- git diff --check (passed)

Xvfb is not installed, so use the installed unprivileged Xorg binary and
dummy driver for isolation. These checks record D-Bus output and native
fixture state; installed-helper MUSHclient, physical input, audible speech,
and physical braille acceptance remain separate live checks.
2026-10-12 23:31:03 -07:00
deedra 4b58fc1cdc Keep Wine event feedback responsive when MSAA providers stall
Synchronous AccessibleObjectFromEvent and IAccessible property queries on
the helper's WinEvent thread could block native typing and focus feedback
while an application-owned accessibility provider stopped responding.

Move those calls into MsaaEventReader, a single COM worker that owns its
native references and exchanges copied requests and results with the event
thread. Bound both queues to 32 entries, invalidate queued work on focus or
foreground changes, and discard results older than 500 ms. Validate the
window, process, thread, generation, and foreground relationship before
presenting a result. Read protected state before querying accessible values.

Reject unrelated background presentation events before invoking providers
or invalidating foreground work. Preserve accessible events from visible
popups owned by the foreground window. Keep existing native menu, editor,
combo, list, and item-control paths, and use native focus fallback when an
MSAA focus request expires or fails.

Poll completed results from the existing event timer. On shutdown, retire
pending work and wait at most 100 ms for the worker; a blocked COM call keeps
only its own state until it completes or the helper process exits. Never
spawn additional workers behind an unresponsive provider.

Validation: CMake configure/build and git diff --check passed. On a private
dummy Xorg display, all four CTest checks passed, as did six event-stall
runs (default, --32-bit, --getter, --background, --popup, --reader orca)
and the existing menu, edit, controls, and list fixtures in both 64-bit and
32-bit modes. See the accompanying regression-test commit for commands.

Private recording-service fixtures do not establish audible speech, physical braille,
or acceptance of every live MUSHclient workflow. A provider that never
returns occupies the single MSAA worker until helper exit.
2026-10-12 23:31:03 -07:00
Storm Dragon 0d9cc2651d Merge branch 'deedra' 2026-10-12 19:12:05 -04:00
deedra aa7a159da3 Document uppercase pitch feedback for Wine typing
Explain that Wine Access preserves character case in accepted editor
insertion events and that the matching Cthulhu-Go reader selects the
configured uppercase voice and pitch. Lowercase feedback returns to the
normal character voice; the helper itself does not set speech pitch.

Extend the live Notepad acceptance procedure with AaÉé to check ASCII and
accented capitals, immediate lowercase pitch restoration, custom character
echo voices, and preservation of character case on braille displays.

The reader implementation and automated regressions are committed separately
in cthulhu-go as b45f84f (Use uppercase character voices for Wine typing echo).
This Wine Access commit changes documentation only.

Validation: reviewed both Markdown diffs and passed git diff --check.
Live listening and physical braille acceptance remain separate checks. The
previous helper build passed, but its GUI fixtures could not run because
Xvfb and xvfb-run are unavailable.
2026-10-12 15:57:39 -07:00
deedra a002c4cc1e Echo typed characters in Wine edit fields 2026-10-12 15:31:00 -07:00
Storm Dragon 4f2f72e945 Removed unused directory. 2026-10-12 18:10:15 -04:00
Storm Dragon d9aa40e16c Some lists were not auto reading results. Hopefully fixed. 2026-10-12 04:55:31 -04:00
Storm Dragon 0f59809e9a Make d-bus available to orca if someone decides they want to implement it. 2026-10-12 04:37:12 -04:00
Storm Dragon c3e981b4c2 Restore wine access after program loses and regains focus. 2026-10-12 04:17:31 -04:00
deedra f40e471938 Fix padded Wine review strings 2026-10-11 22:07:14 -07:00
deedra a8cb350467 Provide fresh Wine review snapshots and 32-bit Edit hooks
Expose visible Wine window text to the matching Go reader's independent
keypad review commands, and extend standard Edit feedback to 32-bit programs
such as MUSHclient without requiring 32-bit Linux GLib/Winelib libraries.

Add lifetime-aware instance/window/control identities and bounded capture
of standard Edit text, button/static captions, native ListBox/ListView items,
and usable MSAA text. Preserve focus, caret, selection, scrolling, and the
clipboard. Exclude hidden/password content before retrieval, retain both
rune and UTF-16 offsets, clip visible ranges, and reject changing or
oversized sources rather than returning incomplete text as a full snapshot.

Export CaptureWindow on the version-1 WineReview D-Bus interface. Register
with the current reader service owner and publish copied focus metadata.
Authorize capture only for the current same-user owner. Use a dedicated
GLib dispatcher and separate COM worker with a 500 ms deadline, one active
job and one pending job, bounded payloads, and explicit stale/busy/limited/
unavailable replies. Keep menu and focus forwarding responsive when an MSAA
provider stalls; retain ordinary feedback with older readers.

Read the actual X11 geometry associated with Wine HWNDs using bounded XCB
queries and __wine_x11_whole_window. Translate virtual-desktop coordinates
and recheck physical geometry before returning captured text. Link XCB in
the helper/tests and declare libxcb in the Arch package dependencies.

Build edit_hook.c into the 32-bit DLL and attach both menu and input hooks
to the foreground 32-bit UI thread. Release both hooks on transitions or
attachment failure. Keep Scintilla-specific hooks confined to 64-bit builds.
Expand Edit integration checks with read-only multiline navigation and
unsuccessful deletion, plus 32-bit editor/Windows Forms lifecycle support.

Add 32-bit/64-bit native capture fixtures, wire-protocol integration checks,
and design/implementation documents. Document exact schema, capture limits,
installation dependencies, compatibility, and live acceptance procedures.

Validation during commit preparation:
- git diff --check passed.
- cmake --build build --parallel passed.
- CTest could not start because xvfb-run is unavailable in this environment.
- Further tests were skipped at the user's request; capture, protocol, and
  menu/editor integration tests were not run during commit preparation.

Live speech and physical braille checks remain necessary, including review
without moving the native caret, incoming output, plugin dialogs, and return
to Linux/Fenrir. Custom painted output requires an accessible provider;
RichEdit/Scintilla capture, semantic object review, Say All, typing echo, and
native Wine braille routing remain unsupported by this protocol.
2026-10-11 20:50:56 -07:00
ak47 872388a59b More fixes for menus and combo boxes. 2026-10-11 00:10:21 -04:00
ak47 67ebc28d15 Goldwave helped find more missing functionality. 2026-10-10 23:43:37 -04:00
Storm Dragon df7879acb5 Notepad++ should work now. 2026-10-10 22:39:24 -04:00
ak47 cbce83581a Bug fixes and reorganization of code. 2026-10-10 22:27:12 -04:00
Storm Dragon 5f78168c57 More accessibility fixes using foobar2000 as a test. 2026-10-10 15:30:23 -04:00
Storm Dragon 22f50402c4 Added installation help to AGENTS.md. 2026-10-10 13:16:17 -04:00