More strictly adhere to nvdaControllerClient and Tolk parameters.

This commit is contained in:
Storm Dragon
2026-07-18 02:53:17 -04:00
parent 5a8a96b14f
commit ffae1c309a
3 changed files with 28 additions and 2 deletions
+2 -1
View File
@@ -23,7 +23,8 @@ nonactivating, and excluded from ordinary window switching. Therefore applicatio
`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
Plain speech queues like NVDA Controller output; Tolk's interrupt flag uses the separate cancel call
before speaking. Braille, cancel, and process ID calls are also 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
@@ -0,0 +1,24 @@
import re
import unittest
from pathlib import Path
class WineAccessControllerContractTests(unittest.TestCase):
def test_legacy_speak_text_queues_without_cancelling_current_speech(self):
sourcePath = Path(__file__).resolve().parents[1] / "wine-access" / "main.cpp"
source = sourcePath.read_text(encoding="utf-8")
match = re.search(
r'extern "C" error_status_t __stdcall speakText\(.*?\n\}',
source,
re.DOTALL,
)
self.assertIsNotNone(match)
self.assertIn(
'g_variant_new("(sb)", utf8.c_str(), FALSE)',
match.group(0),
)
if __name__ == "__main__":
unittest.main()
+2 -1
View File
@@ -440,7 +440,8 @@ extern "C" error_status_t __stdcall testIfRunning(void) {
}
extern "C" error_status_t __stdcall speakText(const wchar_t *text) {
const std::string utf8 = to_utf8(text);
return call_boolean("SpeakText", g_variant_new("(sb)", utf8.c_str(), TRUE));
// Tolk calls cancelSpeech separately when its interrupt argument is true.
return call_boolean("SpeakText", g_variant_new("(sb)", utf8.c_str(), FALSE));
}
extern "C" error_status_t __stdcall cancelSpeech(void) {
return call_boolean("CancelSpeech", nullptr);