master
9
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
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. |
||
|
|
a002c4cc1e | Echo typed characters in Wine edit fields | ||
|
|
f40e471938 | Fix padded Wine review strings | ||
|
|
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. |