Re: Shortcuts not announced when moving through settings


 

Hi,

Category lists such as those found in NVDA and Thunderbird are similar interfaces because they are, after all, lists, not menus. Besides, the way they are defined in NVDA source code makes this suggestion harder to implement because category labels such as "keyboard", "braille", "Windows OCR" and add-on names are hardcoded as settings panel titles. Regarding shortcut keys, they carry over from the days when settings categories were separate settings dialogs (NVDA 2018.2 merged settings dialogs into settings screen as we know it).

Since you asked for technical reasons:

Inside NVDA GUI (graphical user interface) collection is a module that collects settings dialogs and panels. This module consists of classes that define things such as NVDA Settings screen, dictionary dialogs, input gestures dialog, punctuation/symbol pronunciation dialog, and dilaogs to select synthesizer and braille displays. The module also defines blueprints for settings dialogs and settings panel for use by add-ons.

The NVDA Settings screen is composed of a collection of settings category classes, in turn housing settings for that category. Each category class is composed of a collection of settings, with a hardcoded category title text. In addition, each category class (internally called "settings panel") comes with methods to respond to the user clicking "OK", "Apply", and "Cancel" buttons, as well as the ability to detect when a user moves to or away from the selected settings panel and validating settings before saving them.

For example, when you select "General" category from NVDA Settings, the general settings panel will become active. This panel is really a class named "GeneralSettingsPanel" coming to life - this class contains settings such as "show exit options" and other general settings, with the hardcoded title set to "General". Visually, the left-hand side of NVDA Settings screen shows a list of categories, and the right-hand side is populated with settings from the selected category - in this case, "General" is highlighted in category list and general settings will be shown on the right side.

Now suppose that someone says, "I will make it so that shortcut keys are shown whenever users navigate among categories." It might be possible to modify the base settings panel class (which serve as the class that defines the overall behavior of settings panels) and tell it to return a custom title text with shortcut keys added. But there are three problems:

  1. Not all categories have shortcut keys defined: in fact, these shortcut keys ultimately open NVDA Settings screen but to a specific panel. Another reason for not defining shortcut keys for some categories is because some do not appear in some cases - for example, Windows OCR will not be shown if you are not running Windows 10 or 11, and if a shortcut key is defined, that can create a user experience problem for folks using older Windows releases. Same goes with Touch Interaction panel (a settings panel I created a while back) which only appears if you are using a touch-capable computer.
  2. People can change shortcut keys for categories with keys defined: this can be done for a variety of reasons, namely keyboard layout issues, language and localization, among other things.
  3. Aesthetics: when NVDA builds NVDA Settings screen (with help from wxWidgets/wxPython), NVDA will choose the category name and panel that takes most screen real estate. Now suppose that shortcut keys are shown as part of the category title. This will result in blank areas in parts of categories list, which from aesthetics point of view, is undesirable (remember that blind people are not the only users of screen readers).

Therefore, it is not merely a question of technical limitations that can cause problems - other factors are involved such as the ones listed above. And with NV Access employing sighted developers, issues of GUI placement and aesthetics are sometimes discussed.

Hope this clarifies things.

Cheers,

Joseph

Join nvda@nvda.groups.io to automatically receive all group messages.