Skip to content

beta to rc#20032

Merged
SaschaCowley merged 435 commits into
rcfrom
beta
Apr 29, 2026
Merged

beta to rc#20032
SaschaCowley merged 435 commits into
rcfrom
beta

Conversation

@SaschaCowley
Copy link
Copy Markdown
Member

No description provided.

tianzeshi-study and others added 30 commits November 6, 2025 16:54
Fixes #19157
Summary of the issue:

Unable to toggle AI Image Captioner while Screen Curtain is enabled
Description of user facing changes:

Able to toggle imageDesc while screen curtain is enabled
### Summary of the issue:

Updates miscDeps to the latest commit

### Description of user facing changes:

None

### Description of developer facing changes:

Readme has been updated.

### Description of development approach:

`cd miscDeps && git checkout master && git pull && cd .. && git add
miscDeps && git commit`

### Testing strategy:

None neded

### Known issues with pull request:

None
### Summary of the issue:

The Quick Start Guide (QSG) contains the following issues:
* It mentions unassigned commands; unassigned commands should not be
mentioned in the Quick Start Guide since:
* if they are unassigned, they are probably not so common to deserve to
be in the QSG
* the QSG does not indicate how to assign a gesture to a command, which
makes mentioning unassigned commands useless in this guide.
* There is a paragraph on the synth settings ring commands in the QSG,
but the user would not even know what it is.
* Other unassigned commands are mentioned in the synth settings ring
paragraph of the QSG.

### Description of user facing changes:

* Removed unassigned "Report language" from the QSG.
* Added an initial description of the synth setting ring at the top of
its dedicated paragraph in the QSG.
* Removed the mention of unassigned commands to jumpt to the first/last
value in the synth ring commands since they are not assigned, for same
reason as above.

### Description of developer facing changes:

N/A

### Description of development approach:

N/A

### Testing strategy:

Check the generated User Guide.

### Known issues with pull request:

None
Fixup of #19003 

### Summary of the issue:
The license wasn't updated to GPL 2 or later in the user guide
Summary of the issue:

The userGuide.md contained multiple typos, grammar errors, and inconsistencies that needed correction to improve documentation quality.
Description of user facing changes:

Improved clarity and correctness of the NVDA User Guide through fixing:

    5 spelling errors (itallic→italic, meanning→meaning, bloks→blocks, sortered→sorted, THE→The)
    3 grammar errors (by assign→by assigning, wil→will, tree→three)
    5 inconsistencies in terminology and capitalization (NvDA→NVDA)
    1 duplicate key mapping in Eurobraille keyboard commands

Total: 19 documentation improvements. No functional changes.
…ash three times in two minute. (#19175)

Closes #19133
Summary of the issue:

If NVDA crashes somehow on startup, the watchdog restarts NVDA. This issue limits how many times the watchdog will atttempt to recover from crashes by preventing the crash handler from booting if the application has been in a boot loop of 3 or more crashes in one minute.
Description of user facing changes:

When NVDA gets itself into a crash loop, which is very rare, it can crash many times very rapidly. So rapidly that a user's keyboard is effectively locked from use. This issue prevents NVDA from crashing on repeat. Since NVDA often boots at startup, failure to gracefully bail can lock the users computer up every time the user logs in.
Description of developer facing changes:

The watchdog prevents crash handling code from booting on the fourth crash, by simply recording the timestamp of the last 3 crashes in a text file along side the crash dmp file, and then using the timestamps in a rolling window to decide if NVDA should start the crash handler, or gracefully allow shutdown.
…19210)

### Summary of the issue:

The User Guide section 13.1 (Remote Access, Getting started) notes the
limitation for starting a new session in secure mode. This was not noted
in the secure mode section and may be missed by people looking for
information there.

### Description of user facing changes:

Added a line to the list of bullet points in 18.1 "Secure mode disables"
to note manually initiating a new remote access session.
Fix-up of #11311

### Summary of the issue:

In #11311, it was taken into account that older Excel comments were
known as "notes" in newer interfaces, so NVDA's GUI and documentation
has been updatedt to be consistent with newer versions.

The "Comments" checkbox in the Document formatting settings panel has
been updated to "Notes and comments" as part of this work.

However, this checkbox does not control Excel's comments/notes
reporting; it only controls whether comments in text, e.g. in Word, are
reported.

### Description of user facing changes:

This checkbox has been renamed back to "Comments"

### Description of developer facing changes:

N/A

### Description of development approach:

N/A

### Testing strategy:

Manual check

### Known issues with pull request:

One could argue that this checkbox should instead remain "Notes and
comments" and should control Excel's Notes or comments.

That's not my approach. And allowing to control "has notes" cell's
property while "has formula" cannot be controlled would not be
consistent.
<!-- Please read and fill in the following template, for an explanation
of the sections see:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md
Please also note that the NVDA project has a Citizen and Contributor
Code of Conduct which can be found at
https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV
Access expects that all contributors and other community members read
and abide by the rules set out in this document while participating or
contributing to this project. This includes creating or commenting on
issues and pull requests.

Please initially open PRs as a draft.
When you would like a review, mark the PR as "ready for review".
See
https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md.
-->

### Link to issue number:
Part of #18762 
Split from #18419

### Summary of the issue:
We should explain our system tests to test against more applications.
Starting with open source applications that are easily available within
GitHub actions runners,

### Description of user facing changes:
None

### Description of developer facing changes:
None

### Description of development approach:
Perform manual tests and implement equivalent system tests where
possible

### Testing strategy:
See changes

### Known issues with pull request:

### Code Review Checklist:

<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the
PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->

- [x] Documentation:
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [x] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Sascha Cowley <16543535+SaschaCowley@users.noreply.github.com>
Starts #18502

### Summary of the issue:

Our system test bottle neck is chrome tests. There are too many chrome
tests. They take up 20 min off time which could be parallelized down to
3-5min chunks

### Description of user facing changes:

None

### Description of developer facing changes:

Reduced PR times, better grouping logic when adding to
chromeTests.robot.
Symbols tests are now the longest tests (6min). That means 14min from
builds is shaved off from this PR.
Builds have gone from 40-45min to 30min on average.

### Description of development approach:

Added tags to group chrome tests into sub groups.
This is to establish grounds for a potential refactor in the future.

Added timeout constraints to the 3 bottlenecks of the build: building
NVDA source, building the launcher and system tests.
This is so we can monitor and constrain build time lengths.
With these constraints, we guarantee a 40min or faster build.

### Testing strategy:

GitHub actions runners

### Known issues with pull request:

This doesn't refactor the test files fully, just begins the proposal for
logical groupings.
Further work is suggested to refactor chromeTests.py/chromeTests.robot
### Summary of the issue:

There is no highlighter on the recognition result.

### Description of user facing changes:

There is a highlighter on the recognition result.

### Description of developer facing changes:

Added `api.fakeNVDAObjectClasses` set and `api.isFakeNVDAObject`
function to identify fake NVDAObject instances.

### Description of development approach:

Do not use the display model to obtain the caret rectangle of fake
NVDAObjects.

### Testing strategy:

Manual testing: After pressing `NVDA+r` to recognize content, move the
cursor and observe whether the yellow rectangle follows.

### Known issues with pull request:

By default, the highlight rectangle currently covers words rather than
individual characters.

---------

Co-authored-by: Cyrille Bougot <cyrille.bougot2@laposte.net>
Summary of the issue:

Update astral-sh/setup-uv from v6 to v7 to conveniently use the latest security fixes.
Below is the release page for v7.1.3.
Description of user facing changes:

Routine update of CI/CD with no impact on users.
Description of developer facing changes:

Batch replaced uses: astral-sh/setup-uv@v6 with v7 in .github/workflows/testAndPublish.yml.
Description of development approach:

Batch replaced uses: astral-sh/setup-uv@v6 with v7 in .github/workflows/testAndPublish.yml to use the latest stable version.
<!-- Please read and fill in the following template, for an explanation
of the sections see:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md
Please also note that the NVDA project has a Citizen and Contributor
Code of Conduct which can be found at
https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV
Access expects that all contributors and other community members read
and abide by the rules set out in this document while participating or
contributing to this project. This includes creating or commenting on
issues and pull requests.

Please initially open PRs as a draft.
When you would like a review, mark the PR as "ready for review".
See
https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md.
-->

### Link to issue number:
Closes #17667.
<!-- Use Closes/Fixes/Resolves #xxx to link this PR to the issue it is
responding to. -->

### Summary of the issue:
The MathCAT add-on is not currently included in the core of NVDA.
Integrating MathCAT into NVDA will give users access to mathematical
content out of the box.

### Description of user facing changes:
The core functionality of the add-on will remain the same, but MathCAT
will be included without needing to install it as an add-on (replacing
mathPlayer). An additional panel will be added in the NVDA preferences
dialog containing the configuration that is currently handled in
MathCAT's add-on configuration dialog. Additionally, the user docs will
be updated to reflect the replacement of mathPlayer with MathCAT.

### Description of developer facing changes:
The code from the MathCAT add-on has been refactored and cleaned up to
conform to NVDA's coding standards, and that code is included in the
`mathPres/MathCAT` directory with this PR. Dependencies have been added
as a Git submodule in `include/nvda-mathcat`. Before this PR is ready
for review, changes will also be made to the way MathCAT is initialized
(currently, it is only set up to be loaded as an add-on), and YAML
configuration will be replaced with configobj.

### Description of development approach:
Developments will proceed in the following steps:
- Update the initialization of MathCAT so that it is loading and running
correctly in its current form.
- Include MathCAT configuration into the NVDA preferences dialog.
- Replace YAML configuration with configobj.
- Add unit and system tests.

### Testing strategy:
The add-on code after refactoring has been tested only by loading it
into NVDA and testing it functionally. Discussion of more unit and
system tests is ongoing.

### Known issues with pull request:
- Previously, `libmathcat_py.pyd` was included in that MathCAT
directory. Now, it is located in `include/assets`, so it is not being
imported correctly. This can be fixed by updating `pyproject.toml` with
the new path.

### Code Review Checklist:

<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the
PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->

- [x] Documentation:
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [ ] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.

<!-- Please keep the following -->
@coderabbitai summary

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sean Budd <seanbudd123@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Sean Budd <sean@nvaccess.org>
Co-authored-by: WangFeng Huang <1398969445@qq.com>
Co-authored-by: Quentin Christensen <quentin@nvaccess.org>
Co-authored-by: Sascha Cowley <16543535+SaschaCowley@users.noreply.github.com>
Follow up to #19209
Summary of the issue:

We added a 10min time limit to cap and measure builds.
This was just too low, as a recent build narrowly timed out.

A similar cap for the create launcher step also is timing out: https://github.com/nvaccess/nvda/actions/runs/19415041964
Description of user facing changes:

none
Description of developer facing changes:

builds shouldnt timeout unexpectedly
Description of development approach:

increase build timeout to 15min and launcher timeout to 30min
It seems like GitHub changed the URL for CodeQL security analysis
Fixes #19152
Fixup for #18348,
Supersedes #19203, #19171
Summary of the issue:

In LibreOffice, it is not possible to use braille panning since #18348.
Description of user facing changes:

Panning works again in LibreOffice
Description of developer facing changes:

removed OffsetsTextInfo.allowMoveToOffsetPastEnd.
Description of development approach:

Rather than having one allowMoveToOffsetPastEnd class attribute, introduce a allowMoveToUnitOffsetPastEnd method that takes a unit.
…tup-python@v6 (#19229)

Follow up
#19219

#19224
Summary of the issue:

Updated actions/setup-python@v5 to actions/setup-python@v6
Description of user facing changes:

none ci-cd Update
Description of developer facing changes:

Updated the version of actions/setup-python in testAndPublish.yml to 6.x
Description of development approach:

Updated the version of actions/setup-python in testAndPublish.yml to 6.x
Summary of the issue:

SCons was updated recently. This is a necessary step to build NVDA with Visual Studio 2026, which is fully supported.
Description of user facing changes:

None
Description of developer facing changes:

Support for building with VS2026 is now there, however note that VS2022 is still the standard.
Description of development approach:

Updated SCons
Summary of the issue:

Updated actions/upload-artifact from v4 to v5.

Updated actions/download-artifact from 4 to 6
Description of user facing changes:

none
Description of developer facing changes:

Updated the stable versions of actions/download-artifact and actions/upload-artifact in the testAndPublish.yml file.
Description of development approach:
Description of development approach:

Updated the stable versions of actions/download-artifact and actions/upload-artifact in the testAndPublish.yml file.
…19213)

Link to issue number:

Fixes #19214
Summary of the issue:

When gestures include numpad operators (numpad plus, numpad minus, numpad multiply and numpad divide) and are defined with numlock on, they do not appear correctly in input gesture dialog, e.g. "num lock" instead of "num lock+numpad plus")
Description of user facing changes:

Gestures including numpad operators with num lock on are now correctly displayed in the input gesture dialog.
Description of developer facing changes:

N/A
Description of development approach:

In kayboard gestures identifiers, numlock can be considered a modifier or a main key name, depending on the situation:

    considered a modifier when combined with numpad operators, i.e. when numlock is on (but not currently physically pressed) and a numpad operator is presseed
    considered a main key name in all other other cases, i.e. when physically pressed (alone or with other modifiers such as control or shift)

In KeyboardInputGesture.getDisplayTextForIdentifier sort key name with normal modifiers, then numlock and then main key name.
…ut defined speech styles (#19231)

<!-- Please read and fill in the following template, for an explanation
of the sections see:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md
Please also note that the NVDA project has a Citizen and Contributor
Code of Conduct which can be found at
https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV
Access expects that all contributors and other community members read
and abide by the rules set out in this document while participating or
contributing to this project. This includes creating or commenting on
issues and pull requests.

Please initially open PRs as a draft.
When you would like a review, mark the PR as "ready for review".
See
https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md.
-->

### Link to issue number:
Split from #19227.

### Summary of the issue:
On languages without defined speech styles, such as `nl`, the
mathematics settings panel does not load.

### Description of how this pull request fixes the issue:
Relocate ZIP file path calculation logic.

### Testing strategy:
Verified that the mathematics settings panel opens when the nVDA
language and voice are set to Dutch.

### Known issues with pull request:
None known

### Code Review Checklist:

<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the
PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->

- [n/a] Documentation: (out-of-scope, see #19227)
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [x] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.
<!-- Please read and fill in the following template, for an explanation
of the sections see:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md
Please also note that the NVDA project has a Citizen and Contributor
Code of Conduct which can be found at
https://github.com/nvaccess/nvda/blob/master/CODE_OF_CONDUCT.md. NV
Access expects that all contributors and other community members read
and abide by the rules set out in this document while participating or
contributing to this project. This includes creating or commenting on
issues and pull requests.

Please initially open PRs as a draft.
When you would like a review, mark the PR as "ready for review".
See
https://github.com/nvaccess/nvda/blob/master/.github/CONTRIBUTING.md.
-->

### Link to issue number:
Split from #19227.

### Summary of the issue:
MathCAT is loaded from `sys.prefix`, which does not reliably point to
the MathCAT directory on source copies.

### Description of how this pull request fixes the issue:
The MathCAT path is calculated relative to `globalVars.appDir`.

### Testing strategy:
Verified that MathCAT is usable on source copies.

### Known issues with pull request:
None known

### Code Review Checklist:

<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the
PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->

- [n/a] Documentation: (out-of-scope, see #19227)
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [x] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.
### Link to issue number:
None

### Summary of the issue:
Edited the MathCAT section of the user guide, both the overview and
settings sections for clarity and organization.

### Description of user facing changes:
User guide content edits.

### Description of developer facing changes:
The following edits were made:

* Typical use is now a level 4 heading
* ETS acronym expanded (Educational Testing Service)

### Description of development approach:
Edited and proofread to make sure content is clearer.

### Testing strategy:
None (manual proofreading is recommended)

### Known issues with pull request:
None

### Code Review Checklist:

<!--
This checklist is a reminder of things commonly forgotten in a new PR.
Authors, please do a self-review of this pull-request.
Check items to confirm you have thought about the relevance of the item.
Where items are missing (eg unit / system tests), please explain in the
PR.
To check an item `- [ ]` becomes `- [x]`, note spacing.
You can also check the checkboxes after the PR is created.
A detailed explanation of this checklist is available here:

https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md#code-review-checklist
-->

- [x] Documentation:
  - Change log entry
  - User Documentation
  - Developer / Technical Documentation
  - Context sensitive help for GUI changes
- [x] Testing:
  - Unit tests
  - System (end to end) tests
  - Manual testing
- [x] UX of all users considered:
  - Speech
  - Braille
  - Low Vision
  - Different web browsers
  - Localization in other languages / culture than English
- [x] API is compatible with existing add-ons.
- [x] Security precautions taken.

---------

Co-authored-by: Sean Budd <seanbudd123@gmail.com>
…hen running in secure mode (#19238)

Fixes #19216
Follow-up #19175 

### Summary of the issue:

NVDA was failing to start on secure screens, unless the serviceDebug
global parameter was set.

### Description of user facing changes:

NVDA works on secure desktops again.

### Description of developer facing changes:

None

### Description of development approach:

The issue was caused by `utils._crashHandler.CrashStats.crashStatsPath`
assuming that `globalVars.appArgs.logFileName` would always represent a
path. Notwithstanding this, it also wrote to disk, even when
`NVDAState.shouldWriteToDisk` returned `False` (i.e. in scure mode or
running from the launcher).

1. Added several defensive measures to the new `utils._crashHandler`
module.
2. Changed `watchdog.initialize` to no longer add
`utils._crashHandler.crashHandler` as an unhandled exception filter when
running in secure mode.

### Testing strategy:

Ran from source, and executed the following in the python console to
ensure automatic restarts on crash still work as expected:

```py
import ctypes;ctypes.windll.kernel32.DebugBreak()
```

Modified NVDA to allow the scratchpad in secure mode, built a
self-signed launcher, and installed it.

Hit `alt+control+delete`, and observed that NVDA worked as expected.

Added the following global plugin to the scratchpad of the user and
system config:

```py
from globalPluginHandler import GlobalPlugin
import ctypes
from tones import beep
from core import postNvdaStartup

class GlobalPlugin(GlobalPlugin):
	def __init__(self):
		super().__init__()
		postNvdaStartup.register(self.crash)

	def crash(self):
		beep(500,100)
		ctypes.windll.kernel32.DebugBreak()
```

Restarted NVDA, and observed that it started, a tone was heard, and it
crashed, and this only happened 4 times.

Hit `alt+control+delete`, and observed that NVDA started, a tone was
heard, NVDA crashed, and did not restart.

### Known issues with pull request:

When NVDA crashes on the secure desktop, no feedback is given to the
user. However, this is not new.
Fixes #10476
Partially addresses #16272

### Summary of the issue:

Currently, the Screen Curtain is configuration profile dependent. This
can lead to situations in which it is unexpectedly deactivated by a
config profile change.

### Description of user facing changes:

1. The Screen Curtain is no-longer config profile dependent.
2. Screen Curtain settings have been moved to anew "Privacy and
Security" settings category.

### Description of developer facing changes:

The `visionEnhancementProviders.screenCurtain` module has bee removed.

### Description of development approach:

* Added a new `screenCurtain` subpackage, and migrated the existing
`visionEnhancementProviders.screenCurtain` implementation.
* The global object pattern was used, as it is a common pattern
throughout the rest of NVDA's code.
* The core Screen Curtain code is in `screenCurtain._screenCurtain`. The
public API is accessible from `screenCurtan`, including the global
`screenCurtain.screenCurtain` object.
* Updated `core.main` and `core.resetConfiguration` to initializeand
terminate screen curtain.
* Updated the screen curtain toggle script to use the new
implementation.
* Updated the OCR script and screen curtain block action.
* Re-implemented the screen curtain settings as regular settings in a
new "Privacy and Security" panl in `gui.settingsDialogs`.
* I decided to call this category "Privacy and Security" rather than
"Security and Privacy" (as suggested in #16272), as we already have a
"Speech" category, but no categories beginnin wit 'P'.
* Also added an unassigned command to jump directly to the privacy and
security settings.
* Completely removed the `visionEnhancementProviders.screenCurtain`
module, and updated the change log to reflect that previously deprecated
symbols that had redirects in this module have been removed.
* Bumped the config schema version, and added a profile upgrade step
that moves the settings out of `vision` and into the root section. As
the config keys are otherwise identical, this is all that is necessary.
* Updated changed strings to use `pgettext` (category "screenCurtain")

### Testing strategy:

Running from source:

* Enabled tempory screen curtain with the gesture, with and without the
warning enabled. Disabled.
* Enabled screen curtain with the gesture, with and without the dialog
enabled. Disabled.
* Checked and uncheckd the screen curtain option in Privacy and Security
settings, with and without the warning enabled. Also checked that
unchecking the option to show a warning was reflected in the settings
dialog when the warning dialog was shown from NVDA settings.
* Enabled and disabled Screen Curtain with sounds turned on and off.
* Created a configuration profile. Enabled screen curtain. Saved
settings. Activated the profile. Deactivated screen curtain. Saved
settings. Switched back to normal config.
* Reset to saved configuration after enabling and disabling screen
curtain, and reset configuration to factory defaults.
* Ran from source on master, and changed screen curtain settings. Ran
from source on this branch and ensured the old settings were reflected.
Saved the config to disk and ensured that the settings were correctly
persisted to `nvda.ini`.

### Known issues with pull request:

None
RyanMcCleary and others added 22 commits April 8, 2026 14:59
Closes #19811
I am opening this PR as a follow-up to #19888 at the request of @seanbudd
Summary of the issue:

The automatic language option for MathCAT speech was confusing and didn't respond as expected to speech voice/synthesizer language changes. (from #19888)
Description of user facing changes:

Removes the "Automatic" option from MathCAT speech. The default is now English. (from #19888)
Description of developer facing changes:

None
Description of development approach:

Removed the _mathMl parameter from getLanguageToUse, the save/set/restore language pattern from convertSSMLTextForNVDA, and the "Auto" fallback in _createConfigForSpeechStyle. Added a config profile upgrade step to migrate language = Auto to en.
…on and before NVDA restart (#19901)

Fixes #19900 

### Summary of the issue:
After an add-on had been installed and the Store closed, the Store could
not be reopened until NVDA was restarted.

### Description of user facing changes:
The Add-on Store can now be reopened after an add-on has been installed,
even before NVDA has been restarted.
For add-ons pending install, the install date is not provided since the
installation is completed after NVDA has restarted.
Add-ons without install date are sorted after all other add-ons.

### Description of developer facing changes:
`addonStore.models.addon._AddonManifestModel.installDate` may now be `None`.

### Description of development approach:
* `_AddonManifestModel.installDate` now returns `None` if the add-on is
not completely installed; take this into account when using this value.
* If the `installDate` is `None`, use `datetime.max` to sort the add-on
after all other ones.

### Testing strategy:
Manual tests:
* Tested #19900 STR and checked details field and install date column.
* Sorted add-ons by install date column in the list.

### Known issues with pull request:
Non

---------

Co-authored-by: Cyrille Bougot <cyrille.bougot@laposte.net>
### Summary of the issue:
The "Use native math speech in Word and Outlook" option is misleading,
as it affects speech, braille and navigation.

### Description of user facing changes:
The option has been renamed to "Use native math support in Word and
Outlook", and moved to a new "Application support" section of the Math
settings panel.
The user guide has also been updated to clarify how the option works,
and that this prevents using MathCAT in Word and Outlook altogether.

### Description of developer facing changes:
None.

### Description of development approach:
Created a new group in the math panel. Moved the checkbox creation after
creation of that panel, and changed it to point to the new group.
Rewrote the UG as appropriate.

### Testing strategy:
Ran from source and checked that the settings panel looks correct.
Built the user guide from source and checked the output.
Ran from source, tabbed to the native word math checkbox and hit `F1`
and checked that I was moved to the correct section of the user guide.

### Known issues with pull request:
None
### Summary of the issue:

The user guide and changelog for NVDA 2026.1 contain various typos,
inconsistent capitalisation, broken anchors, incorrect key bindings, and
minor wording issues that should be resolved before the translation
freeze.

### Description of user facing changes:

- Fixed spelling and grammar throughout changes.md and userGuide.md
(e.g. "recognising" → "recognizing", "aides" → "aids", "inside of" →
"inside").
- Corrected inconsistent capitalisation (e.g. "unicode" → "Unicode",
"32bit" → "32-bit", "both" → "Both" at start of list items, consistent
"Enhanced mode" / "Simple mode" / "Character mode").
- Fixed incorrect key binding in the MathCAT navigation table: "Describe
placemarker" now correctly reads control+shift+1 through control+shift+0
instead of control+shift+1 through shift+0.
- Fixed a broken anchor {MathSpeechStyle} → {#MathSpeechStyle} and
corrected cross-reference anchors (#reportSpellingErrors →
#ReportSpellingErrors).
- Added missing heading anchor {#MathTypicalUse} to the "Typical Use"
section.
- Removed the obsolete "AsCompound" MathCAT chemistry option and renamed
"SpellOut" to "Spell it out" to match the current MathCAT UI.
- Improved clarity of wording in the spelling/grammar error reporting
settings, add-on copy to system configuration, and add-on store
changelog sections.
- Added missing issue reference (#18956) to a changelog entry.
- Fixed minor formatting issues (missing space before backtick, extra
space before comma).

### Description of developer facing changes:

None

### Description of development approach:

Instructed Claude Code to review `user_docs/en/changes.md` and
`user_docs/en/userGuide.md`. Manually actioned its suggestions.

### Testing strategy:

- Manual review of the rendered documentation for correctness and
consistency.
- Verified that all cross-reference anchors resolve correctly.

### Known issues with pull request:

None

---------

Co-authored-by: Cyrille Bougot <cyrille.bougot2@laposte.net>
Co-authored-by: Luke Davis <8139760+XLTechie@users.noreply.github.com>
This pull request updates translations to languages being tracked from
Crowdin.

Co-authored-by: GitHub Actions <github-actions@github.com>
…hile reading via speech or sounds (#19936)

### Summary of the issue:
When NVDA is configured to report spelling or grammar errors with sounds
or in braille, even when it's not configured to report them via speech
output, if the cursor is moved out of an error, NVDA says "out of
spelling (or grammar) error".
### Description of user facing changes:
For NVDA 2026beta, NVDA no longer speak "out of error" if it's not
configured to speak or play a sound for spelling or grammar errors.
### Description of developer facing changes:
None.
### Description of development approach:
A private function has been created to determine if out of errors should
be reported. It returns True if NVDA is configured to report errors with
speech or sounds.
### Testing strategy:
Tested manually, enabling the reporting of errors via braille, speech,
or sound outputs.
### Known issues with pull request:
None.
Fixes #19952

### Summary of the issue:
The add-on store fails to load if invalid data is returned from the
server.

### Description of user facing changes:
Crash no-longer occurs.

### Description of developer facing changes:
None.

### Description of development approach:
When extracting scan results, catch `TypeError` and `IndexError` as well
as `KeyError`.

### Testing strategy:
Created a faulty cache:

```
jq `
'.data|=(fromjson|.[0].scanResults.virusTotal|=null|tostring)' `
_cachedCompatibleAddons.old.json > _cachedCompatibleAddons.json 
```

Ran from source and checked that the add-on store opened.

### Known issues with pull request:
In my testing, the invalid file also caused NVDA not to start, but the
OP didn't report any such problem, so their problem may have been
slightly different? Nevertheless this fix solves an actual bug.
…19953)

### Summary of the issue:
The symbols artifact on CI doesn't include any of the dll/exe/pdb files
from NVDA's lib directory. This makes it almost impossible to debug
problems in NVDA C++ code unless you are using a local build. This is
particularly problematic when trying to debug nvdaHelperRemote crashes
experienced by users who aren't developers.

### Description of user facing changes:
None.

### Description of developer facing changes:
The symbols artifact on CI now includes dll/exe/pdb files from NVDA's
lib directory.

I don't think this needs a change log entry because it doesn't change
anything in NVDA itself.

### Description of development approach:
Once upon a time, NVDA had `lib\*.dll`, `lib64\*.dll`, etc. Some time
ago, the directory structure changed to `lib\x64\*.dll`,
`lib\x86\*.dll`, etc. In addition, arm64 and arm64ec libraries were
added. However, the CI symbol store creation code was never updated
accordingly. This PR updates the paths in the script.

### Testing strategy:
Checked the log output from the `Run ci/scripts/buildSymbolStore.ps1`
step on GitHub actions for this pull request. Verified that it includes
all files.
Also downloaded the artifact and checked that it contains all expected
files.

### Known issues with pull request:
None.
This pull request updates translations to languages being tracked from
Crowdin.

Co-authored-by: GitHub Actions <github-actions@github.com>
Fix-up of #17997


[Reported](https://groups.io/g/nvda-fr/topic/nvda_2026_1_beta_et_l_annonce/118894622)
on French mailing list.

### Summary of the issue:
In 2026.1beta versions, spelling errors are no longer reported in Word
legacy.

### Description of user facing changes:
Spelling errors can now again be reported in Word legacy.

### Description of developer facing changes:
N/A
### Description of development approach:
In #17997, the config key "reportSpellingErrors" has been modified to
"reportSpellingErrors2" due to upgrade. But one use of this config key
has been forgotten. It is being fixed here.

### Testing strategy:
Manual tests with legacy and UIA Word.

### Known issues with pull request:
N/A
Closes #19984
Summary of the issue:

Once an add-on is installed, VirusTotal scan results would be cached in a different format than what was served by the server.
This would cause issues in unpacking the scanned data.
This would cause scan results to fail to be loaded for installed add-ons.
Description of user facing changes:

Viewing scan results for installed add-ons should be fixed
Description of developer facing changes:

None
Description of development approach:

    Added a toDict method to the VirusTotalScanResults class in scanResults.py, enabling conversion of scan result objects to a dictionary format matching the original scan results structure.
    Updated the asdict method in AddonStoreModel to use toDict for VirusTotalScanResults fields, ensuring correct serialization.
This pull request updates translations to languages being tracked from
Crowdin.

Co-authored-by: GitHub Actions <github-actions@github.com>
This pull request updates translations to languages being tracked from
Crowdin.

Co-authored-by: GitHub Actions <github-actions@github.com>
…fied Chinese (#20019)

PengKun, a contributor from the Chinese community, is planning extensive
changes to this dictionary. The attached files contain detailed logs and
the rationale for these changes, which are provided here for archival
purposes.
This pull request updates translations to languages being tracked from
Crowdin.

---------

Co-authored-by: GitHub Actions <github-actions@github.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
@SaschaCowley SaschaCowley requested review from a team as code owners April 29, 2026 01:35
@github-actions github-actions Bot requested a deployment to snapshot April 29, 2026 02:27 Abandoned
@SaschaCowley SaschaCowley merged commit ae21324 into rc Apr 29, 2026
252 of 262 checks passed
@github-actions github-actions Bot added this to the 2026.2 milestone Apr 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.