Skip to content

Master to beta#19249

Merged
seanbudd merged 35 commits intobetafrom
master
Nov 21, 2025
Merged

Master to beta#19249
seanbudd merged 35 commits intobetafrom
master

Conversation

@seanbudd
Copy link
Copy Markdown
Member

No description provided.

cary-rowen and others added 30 commits November 3, 2025 02:24
…ssful recognition (#19150)

Resolves #19144

### Summary of the issue:
After performing an OCR, users must manually initiate a "say all"
command to hear the full recognition result. For users who frequently
perform OCR on large blocks of text, this requires an extra step each
time, slowing down their workflow.

### Description of user facing changes:
- Adds a new checkbox, "Automatically say all on result", to the Windows
OCR settings panel (under Preferences -> Windows OCR).
- When enabled, NVDA will automatically start reading the full text of a
successful OCR result.
- This feature is disabled by default.

### Description of developer facing changes:
- Adds a new configuration key `autoSayAllOnResult` (boolean, default
`False`) under the `[uwpOcr]` section in `configSpec.py`.

### Description of development approach:
To ensure "say all" is triggered only after the recognition result
document has focus, a flag (`_shouldSayAllOnFirstFocus`) is set when the
result is first received in `_onFirstResult`. The actual `sayAll`
command (`sayAll.SayAllHandler.readText(sayAll.CURSOR.CARET)`) is then
called from the `event_gainFocus` handler of the
`RefreshableRecogResultNVDAObject`.

### Testing strategy:
Manually tested by:
1. Enabling the "Automatically say all on result" option in the Windows
OCR settings.
2. Performing OCR on a navigator object (`NVDA+r`). Verified that "say
all" begins automatically.
3. Disabling the option and performing OCR again. Verified that "say
all" does not start, and only the document title is announced.
4. Confirmed the setting persists after restarting NVDA.

### Known issues with pull request:
The options in Windows OCR do not appear to follow profile switching,
which seems to be a general issue and not specific to this change.
Fixes #18709
Follow-up of #11311
Summary of the issue:

In Excel (legacy), when entering a cell with a note, Excel reports "Has comment". This is confusing since there are new threaded comment types in newer Excel versions.

It was listed as a known issue of #11311.

It's worth noting that with Excel UIA, NVDA already reports "Has note" in this case.
Description of user facing changes:

When moving the focus on a cell with a note, Excel now reports "Has note". It is consistent with NVDA's interface and User Guide which mention note everywhere else.
Description of developer facing changes:

N/A
Description of development approach:

Use the new HASNOTE state introduced since then instead of the HASCOMMENT state, as done for UIA.
Link to issue number:

Fixes #18876
Summary of the issue:

NVDA reports as not supported dialects not available in synthesizer languages, even when a fallback language can be switched to.
Description of user facing changes:

When a dialect is not available for the current synthesizer, but NVDA can switch to a fallback language, that dialect won't be reported as not supported.
Description of developer facing changes:

None
Description of development approach:

In the languageIsSupportedfunction of the SynthDriver class, if a language is not supported, search for the availability of a fallback language, defined as mainLanguage-mainLanguage, for example, fr-fr.
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
SaschaCowley and others added 5 commits November 20, 2025 00:28
Closes #19165

### Summary of the issue:

MathPlayer is no longer maintained and is not 64-bit compatible.

### Description of user facing changes:

MathPlayer is no longer supported by NVDA.

### Description of developer facing changes:

MathPlayer code has been removed.

### Description of development approach:

* Deleted the `mathPres.mathPlayer` module
* Removed `mathPlayer_sconscript` and its callers from the build
system
* Fixed a few comments and strings that mentioned MathPlayer
* Removed MathPlayer from miscDeps nvaccess/nvda-misc-deps#48

### Testing strategy:

Rebuilt NVDA and ensured that it still works and MathCAT continues to
function.

### Known issues with pull request:

None
…s panel (#19243)

Resolves #19097
Summary of the issue:

Users need to open settings panel to enable image description
Description of user facing changes:

If image description is not enabled in settings pannel, it will show a dialog to enable it in current session when press the keyboard shortcut
Fixes #19242 
Summary of the issue:

NVDA was reporting multieselectable for every table cell in Libre Office Calc.
Description of user facing changes:

    No longer redundant multiselectable reporting
    Since the table in Libre Office has the multieselectable state, reword the option in settings to talk about object, not specifically lists.
<!--pre-commit.ci start-->
updates:
- [github.com/pre-commit/pre-commit-hooks: v5.0.0 →
v6.0.0](pre-commit/pre-commit-hooks@v5.0.0...v6.0.0)
- [github.com/asottile/add-trailing-comma: v3.2.0 →
v4.0.0](asottile/add-trailing-comma@v3.2.0...v4.0.0)
- [github.com/astral-sh/ruff-pre-commit: v0.12.7 →
v0.14.5](astral-sh/ruff-pre-commit@v0.12.7...v0.14.5)
- [github.com/RobertCraigie/pyright-python: v1.1.406 →
v1.1.407](RobertCraigie/pyright-python@v1.1.406...v1.1.407)
- [github.com/astral-sh/uv-pre-commit: 0.8.4 →
0.9.11](astral-sh/uv-pre-commit@0.8.4...0.9.11)
<!--pre-commit.ci end-->

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Sean Budd <sean@nvaccess.org>
Description of user facing changes:

Users will hear punctuation and symbols in the Luxembourgish language with the supported tts.
Description of developer facing changes:

Not applicable
Description of development approach:

Created the symbols file and character descriptions for lexembourgish
Copilot AI review requested due to automatic review settings November 21, 2025 03:36
@seanbudd seanbudd requested review from a team as code owners November 21, 2025 03:36
@seanbudd seanbudd enabled auto-merge November 21, 2025 03:36
@seanbudd seanbudd disabled auto-merge November 21, 2025 03:37
@seanbudd seanbudd merged commit 779b345 into beta Nov 21, 2025
14 of 15 checks passed
@github-actions github-actions bot added this to the 2026.1 milestone Nov 21, 2025
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR merges changes from master to beta, incorporating multiple significant features and improvements. The changes include replacing MathPlayer with MathCAT for math presentation, reorganizing Screen Curtain settings, and various bug fixes and enhancements.

Key changes:

  • Integration of MathCAT as the default math presentation provider, removing MathPlayer support
  • Screen Curtain settings moved from Vision category to new Privacy and Security category
  • Addition of crash loop detection to prevent system lockups
  • Various UI/UX improvements and bug fixes

Reviewed Changes

Copilot reviewed 67 out of 68 changed files in this pull request and generated no comments.

Show a summary per file
File Description
user_docs/en/userGuide.md Updated documentation to reflect MathCAT integration and Screen Curtain reorganization
user_docs/en/changes.md Added changelog entries for new features and deprecations
source/mathPres/MathCAT/* New MathCAT implementation files for math presentation
source/screenCurtain/* Refactored Screen Curtain into standalone module
source/gui/settingsDialogs.py Added Math settings panel and Privacy & Security settings panel
source/config/configSpec.py Updated config schema to version 20 with new math and screenCurtain sections
tests/system/robot/chromeTests.robot Added test tags for better organization
tests/system/robot/vscodeTests.* Expanded VS Code testing coverage
Comments suppressed due to low confidence (6)

source/screenCurtain/init.py:1

  • Corrected spelling of 'theScreen' to 'the Screen'.
    source/gui/settingsDialogs.py:1
  • Corrected inconsistent punctuation in contributor name - removed period after 'Proß'.
    user_docs/en/userGuide.md:1
  • Corrected spelling of 'Rescribe' to 'Describe'.
    source/locale/lb/symbols.dic:1
  • Corrected spelling of 'botton' to 'bottom'.
    source/mathPres/MathCAT/preferences.py:1
  • Corrected spelling of 'nether' to 'neither'.
    source/mathPres/MathCAT/localization.py:1
  • Corrected spelling of 'highliting' to 'highlighting'.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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.