JAWS Scripts For TeamTalk Qt
Doug Lee
Last Revised August, 2024

This document describes the scripts for the TeamTalk 5 Qt client and provides tips for using this application with JAWS. This document can be opened from within TeamTalk via a double press of JAWSKey+F1 (or Insert+F1).

Note: This client is sometimes referred to here as the Qt (officially pronounced "cute") client to distinguish it from the retired Classic client.

Table of Contents

System Requirements For JAWS Users

There are no known system requirements for these scripts beyond those for TeamTalk itself. These scripts only support the Qt client. JAWS 17.0 or later is required. JAWS versions older than 2021 have not recently been carefully tested with these scripts.

Script Installation Instructions

To install these scripts on a new system:

  1. Load JAWS if this has not already been done. This will require administrative privileges on the computer.
  2. Run JAWS as the user for whom the scripts are to be installed. This and the following steps must be performed for each user of the computer who will be using JAWS with these scripts.
  3. Download and run, or run directly, the installer for these scripts; and follow the on-screen directions. Be sure to install the scripts in the currently running JAWS version if a JAWS version list is presented.
  4. To verify successful installation, type Insert+Q from within TeamTalk. part of the JAWS spoken response should be a revision number. If you do not hear a revision number, the scripts are not correctly loaded.

Migrating From the Classic Client and Configuring the Qt Client For Accessibility

For tips on migrating from the TeamTalk Classic client to the Qt client, and for differences between the clients, see the TeamTalk Classic To Qt Migration Guide. That page provides the following resources:

Key Sequences

These scripts incorporate commands that consist of sequences of keystrokes, all beginning with a common prefix, or "command keystroke." This approach allows many script commands without the risk of conflicting with application keystrokes. See the "Multi-Key Command Sequences" section of the "Common Script Elements" document for further details, including how to explore the available script commands (similar to exploring a menu system), and how to change the Command keystroke if necessary.

By default, the Command keystroke for these scripts is [. This document may refer to this keystroke as [ or Command; so, for example, [ Tab and Command Tab both refer to typing the prefix keystroke, then separately the Tab key. Some sequences may consist of more than two keystrokes, or "levels"; for example, [ d r would refer to typing [, then d, then finally r.

Script Commands and Features

Moving Focus Among Controls and Windows

In the main TeamTalk window, [ C will focus the channel tree.

In the main window and in private chat windows, [ E focuses the chat input box, while [ H focuses the chat history output box.

In a private chat window, [ T announces whether the other user is typing. The scripts can also announce and/or make a sound when the other user is typing, depending on Quick Settings options. Note that not all TeamTalk clients send the necessary internal notifications to make this work. In particular, the Windows/Linux/MacOS Qt-based client does, but the Windows classic and iOS clients do not. At this writing, text clients such as TTCom also do not. If you are unsure of why you do not receive typing notifications in a particular chat, use Ctrl+I on the user in the channel tree to check the user's client type. Typing indicators are not available in a channel window.

From within any TeamTalk window, type the sequence [ N to move to the next visible TeamTalk window, and the sequence [ Shift+N to move to the previous one. These will include all chat windows and main TeamTalk windows from all open visible instances of TeamTalk Qt. The order of windows may sometimes seem arbitrary but is usually related to the order of window creation.

TeamTalk Status Reporting and Inquiry

While the scripts are running, JAWS will announce automatically any changes in the following on-screen indicators, which appear as checkboxes in a toolbar near the top of the TeamTalk window. For each of these, JAWS will say the indicator name along with "Enabled" or "Disabled" when the indicator changes.

Additionally, if TeamTalk connects to or disconnects from a server, JAWS will say "Connected" or "Disconnected," respectively. These automatic announcements can be turned off and on via the "Toolbar change announce" option in Quick Settings (JAWSKey+V).

[ S will announce a summary of TeamTalk status information. This generally consists of a list of those items from the above set that are currently checked. Typing the sequence [ Shift+S will announce a somewhat more verbose version of the same information.

The sequence [ Q will toggle Question mode via one of the buttons on the toolbar. Question mode produces a blinking icon beside your name in other participants' channel trees. This is similar to raising your hand in some other chat applications.

The standard JAWS command for announcing the application status line, Insert+PgDn, will reliably announce this information even if it is clipped on screen. This information typically includes the rate at which packets are being received (RX) and transmitted (TX). Sometimes, it will also include a ping time, which is an indication of how long it takes data to travel between your machine and the TeamTalk server.

Miscellaneous Commands and Features

By default, JAWS will maximize main and chat TeamTalk windows automatically so that message reading will be more efficient, rather than allowing TeamTalk's native window sizing. Native window sizing can be turned on via the "Allow native window sizing" checkbox in Quick Settings (JAWSKey+V).

As you Up and Down arrow through a chat history window, JAWS will produce a small click sound when you encounter the top or bottom of history.

Message date and time stamps can be ignored during navigation through chat history even when displayed by TeamTalk. This feature is toggled on and off in the JAWS Quick Settings dialog (JAWSKey+V) with the "Suppress message date and time stamps when shown by TeamTalk" option. The JAWS SayLine command, Insert+Up, will speak the stamps regardless of this setting. Typing that command twice will, as usual in JAWS, spell the line but then will honor the suppress-stamps setting for convenience. Note that some types of entries in a message chat window may not have their stamps suppressed even when this option is in effect. Such entries include message of the day, this user joining a channel, and server name entries. At this writing, these are not formatted with the leading asterisk (*) that appears before most system message entries.

The scripts improve JAWS' reporting of correct information for Left and Right arrows, Backspace, Delete, etc. in an edit box. This does not work in a password box, however. For these, JAWS will report the number of asterisks shown.

The standard JAWS Ctrl+JAWSKey+V command for reporting the current application version reports the full correct version number. Without the scripts, the version number may be spoken oddly.

The sequences [ X and [ V are added as alternatives to the TeamTalk native commands Ctrl+Alt+X and Ctrl+Alt+V for marking and moving channel participants to another channel. These duplicate commands may be useful to those who struggle with compound keystrokes or prefer sequences over compound keystrokes.

Other random script features:

Features specific to field names and types:

Making and Using Shortcuts For Sound Device Control

The scripts provide a system for rapid changing of sound devices and/or sound device settings. This is considered an advanced feature of use mostly to those with complex needs, Virtual Audio Cable setups, etc. Users of the feature discussed in this section would also profit from understanding TeamTalk profiles, which are not covered in this document but which provide rapid means to launch TeamTalk instances with different configurations that will not collide with each other when settings are changed during use.

The system works by allowing storage of a menu option for future toggling or activation with a shortcut. After a shortcut is made, using it will activate its menu option very quickly without requiring the user to go through all the menu levels again to find it. Commands for this system begin with the sequence [ M and end with a plain digit to activate a shortcut, Ctrl with a digit to set a shortcut, and Shift with a digit to report the current setting of a shortcut.

There is one additional sequence, [ M L, which displays a list of assigned shortcuts. Pressing Enter on one of these will execute it. To close the list without running a shortcut, press Esc.

To create a shortcut:

  1. Use the TeamTalk menu system to find the item you want to assign to a shortcut. For example:
  2. Upon finding the menu item you want to assign to a shortcut, type the sequence [ M followed by Ctrl with the number you want to assign as a shortcut. To use [ M 1 in the future for this menu item for example, type the sequence [ M Ctrl+1. This will make the sequence [ M 1 activate this option from now on.
  3. You can assign more shortcuts while the menu system is open simply by navigating to them in turn and typing sequences to make the assignments. Close the menu system when done.

To use a shortcut, type [ M followed by the shortcut's digit. JAWS will say the name of the final menu item being activated. Note that it may take a couple seconds for the shortcut to complete its execution.

To check what is assigned to a shortcut, type [ M followed by Shift with the digit. In this case, JAWS will say the full menu path of the item that would be activated. Alternatively, type [ M L to display a list of all shortcut assignments at once.

This shortcut system can actually be used to assign a shortcut to any menu item in TeamTalk, but most items that are not for sound device control already have keyboard shortcuts in TeamTalk itself. Assigning shortcuts to items like Enable Echo Cancellation or Enable Denoising might be useful though.

There are a few caveats to keep in mind when using this system:

Known Issues

Screen readers may repeat history entries during Up and Down arrowing, especially if the window is not maximized. This is a UIA issue.

Leaving the cursor at the end of a chat history, such as after typing Ctrl+End, will cause the cursor to remain at the end as new lines are added. This means that you must avoid leaving the cursor at the very end of the history if you want TeamTalk to remember where you left off reading. It is ok to leave the cursor anywhere else on the last line. This issue can also occur if you use the history control's Context menu to clear the message history, because doing so will often, if not always, cause the cursor to be at the end of the history as new messages arrive.

If a user is selected in the channel tree, such as by arrows, and that user changes status, such as when starting or stopping a stream or going away, screen readers may report a focus change even though none has occurred. This is a Qt issue. A good workaround is to move focus to a channel rather than a user before moving away from the channel tree.

Braille support is not well tested.

Revision History

Here is the revision history of these scripts, most recent revision first:

Revision 437, August 15, 2024, tested against TeamTalk 5.17.0

Translators: There are changes in one message file.

Diff showing message file changes Lines starting with a dash are old, with a plus are new, and with a space are for context. This material is offered experimentally to see if it helps translators keep up with project changes.
=== modified file 'teamtalk_lang.xml'
--- old/teamtalk_lang.xml	2024-07-08 17:35:43 +0000
+++ new/teamtalk_lang.xml	2024-08-15 18:54:11 +0000
@@ -31,6 +31,7 @@
 x=Type Ctrl+Alt+X to mark one or more channel participants for moving
 v=Type Ctrl+Alt+V to move channel participants saved earlier
 m=Menu hotkey|Hotkey
+m&l=List hotkey assignments
 m&Digits 0 through 9=Execute previously saved hotkey
 m&Shift with digits 0 through 9=Speak hotkey assignment
 m&Ctrl with digits 0 through 9=Save hotkey assignment
@@ -96,6 +97,10 @@
 </message>

 <!-- Messages for the mhs module. -->
+<!-- Title of key assignment list dialog. -->
+<message name="mhs___msgKeyList">
+Key Assignments
+</message>
 <!-- For when the user tries to save an item but focus is not on a menu item. -->
 <message name="mhs___msgNotMenuItem">
 Focus is not on a menu item
@@ -119,6 +124,14 @@
 <message name="mhs___msgNotInMainWindow">
 Focus is not in the main window
 </message>
+<!-- How to point out a menu item that can't be found. -->
+<!-- %1 is the menu item path. -->
+<message name="mhs___msgNotFound">
+Unable to find menu item %1
+</message>
+<message name="mhs___msgGeneral">
+Menu processing error
+</message>

 <!-- Messages for the typing module. -->
 <!-- Case-sensitive text that must appear in a typing indicator for it to be considered one. -->

Revision 431, July 20, 2024, tested against TeamTalk 5.17.0

Translators: There are changes in one message file.

Diff showing message file changes Lines starting with a dash are old, with a plus are new, and with a space are for context. This material is offered experimentally to see if it helps translators keep up with project changes.
=== modified file 'teamtalk_lang.xml'
--- old/teamtalk_lang.xml	2024-04-18 17:46:43 +0000
+++ new/teamtalk_lang.xml	2024-07-20 15:03:41 +0000
@@ -30,6 +30,10 @@
 Shift+s=Speak more verbosely the statuses of toolbar icons
 x=Type Ctrl+Alt+X to mark one or more channel participants for moving
 v=Type Ctrl+Alt+V to move channel participants saved earlier
+m=Menu hotkey|Hotkey
+m&Digits 0 through 9=Execute previously saved hotkey
+m&Shift with digits 0 through 9=Speak hotkey assignment
+m&Ctrl with digits 0 through 9=Save hotkey assignment
 </message>
 <!-- What to say when the sequences [ X and [ V, respectively, are typed. -->
 <message name="msgMark">
@@ -91,6 +95,31 @@
 %1, %2
 </message>

+<!-- Messages for the mhs module. -->
+<!-- For when the user tries to save an item but focus is not on a menu item. -->
+<message name="mhs___msgNotMenuItem">
+Focus is not on a menu item
+</message>
+<!-- For when trying to save from a non-leaf menu item. -->
+<message name="mhs___msgNotLeaf">
+Focus is on a menu item that has a submenu
+</message>
+<!-- Save success and failure messages. -->
+<message name="mhs___msgSaved">
+Hotkey saved
+</message>
+<message name="mhs___msgSaveError">
+Error saving hotkey
+</message>
+<!-- For when Speak is called on a key with no assignment. -->
+<message name="mhs___msgNoAssignment">
+Not assigned
+</message>
+<!-- For when Exec is called from a menu, user buffer, dialog, etc. -->
+<message name="mhs___msgNotInMainWindow">
+Focus is not in the main window
+</message>
+
 <!-- Messages for the typing module. -->
 <!-- Case-sensitive text that must appear in a typing indicator for it to be considered one. -->
 <!-- A space will be required before this text in the string being checked. -->
@@ -121,7 +150,7 @@
 Stream Media File to Channel|Stream to channel
 Mute All|Mute all
 Record Conversations to Disk|Store conversations
-Enable Question Mode|Question mode
+Toggle Question Mode|Question mode
 </message>
 <!-- How checkboxes on the toolbar are announced when activated (checked) or deactivated. -->
 <!-- %1 is a name from the above list of item names (the part after the vertical bar). -->

Revision 417, April 22, 2024, tested against TeamTalk 5.16.1

Revision 414, March 27, 2024, tested against TeamTalk 5.15.2

6 older revisions back through August 10, 2021

Revision 411, October 27, 2023, tested against TeamTalk 5.14

Revision 398, September 26, 2022, tested against TeamTalk 5.10 and 5.11.0 Beta

Revision 393, July 7, 2022, tested against TeamTalk 5.9 and 5.10.0 Beta

Revision 387, May 2, 2022, tested against TeamTalk 5.8.1 Beta

Revision 357, August 15, 2021, tested against TeamTalk 5.8.1 Beta

Revision 349, August 10, 2021, tested against TeamTalk 5.8.1 Beta

This is the first release of these scripts for the Qt client. The revision number is high because these scripts originated as scripts for the TeamTalk Classic client.