Fix bosnian character descriptions#19466
Closed
tareh7z wants to merge 20 commits intonvaccess:betafrom
Closed
Conversation
Member
|
please make sure this is based off of beta, not master. |
Start the dev cycle for the 2026.2 release. This won't be a compatibility breaking release. Complete: - [x] New section in the change log. - [x] Update NVDA version in `master` - [x] Update [`nvdaAPIVersions.json` to include the next version](https://github.com/nvaccess/addon-datastore-transform) nvaccess/addon-datastore-transform#36 - Re-run the last "Transform NVDA addons to views" on [addon-datastore](https://github.com/nvaccess/addon-datastore/actions/workflows/transformDataToViews.yml) to regenerate projections (views) for the add-on datastore API. On merge: - [x] [Update auto milestone ID](https://github.com/nvaccess/nvda/settings/variables/actions)
Close #625 First step to #18400 People want commands to repeat the last spoken information, to be able to display it and to copy it. Actually, they also want a deeper history of the speech, but NV Access has recommended in #18400 to begin with the last speech. A new commands has been introduced: Repeat last spoken information (`NVDA+shift+F12`). Pressing it twice displays this information in a browseable message. The copy concern can be considered addressed since browseable message now have a copy button. When in on-demand speech mode, the last string to be spoken is memorized, no matter if it is actually spoken (on-demand command), or not. This provide a quite handy mode to retrive the last information that should have been spoken if speech mode had been on. N/A Use `pre_speech` extension point to store the last spoken information Manual test, with speech modes on and on-demand. This minimalist PR may be frustrating for a lot of people expecting more, i.e. a more complete speech history feature as in the add-on, in Jaws or in Narrator.
Fixed: #17434 ### Summary of the issue: Previously, we called `InvalidateRect` every 100 milliseconds to refresh the entire window. This caused `dwm.exe` to perform extensive calculations, resulting in high GPU or CPU utilization—particularly noticeable on low-performance machines. ### Description of user facing changes: Enabling the highlighter does not cause `dwm.exe` to consume excessive resources continuously, especially when no objects are being updated. ### Description of developer facing changes: * **Type Hinting Improvements:** Updated type hints across `autoSettings.py`, `mouseHandler.py`, and `NVDAHighlighter.py` to use modern Python syntax (e.g., standard collection generics like `list[...]` instead of `typing.List`, and `type` aliases). Added `override` decorators where appropriate. * **Formatting import** Use ruff to format import statement. * **NVDAHighlighter Refactor:** * `HighlightStyle` is now a `NamedTuple` with explicit type annotations. * Refactored `HighlightWindow` to separate logic for coordinate mapping (`_mapRectToClient`) and determining draw targets (`_getDrawRects`). * Introduced state tracking (`_prevContextRects`) to the highlighter window to facilitate delta updates. ### Description of development approach: To address the performance issue with `dwm.exe`: 1. **Dirty Rectangle Invalidation:** Instead of blindly invalidating the entire screen overlay window every refresh cycle (`InvalidateRect(..., None, ...)`), the approach was changed to calculate specific "dirty" regions. 2. **State Tracking:** The `HighlightWindow` now caches the rectangles rendered in the previous frame. 3. **Delta Calculation:** During `refresh()`: * The current required rectangles are calculated. * They are compared with the cached previous state. * If a context's rectangle has changed or was removed, the **old** screen region is invalidated (to clear the artifact). * If a context's rectangle is new or changed, the **new** screen region is invalidated (to draw the new highlight). 4. **Region Calculation:** A helper method `_invalidateContextRect` maps the logical object rectangle to client coordinates and adds necessary padding (accounting for the pen width and anti-aliasing) to ensure the invalidation rect covers the entire visual drawing. This minimizes the surface area that the Windows DWM needs to recompose, drastically reducing GPU/CPU usage. ### Testing strategy: Manual Testing: 1. Build and install the self-signed launcher. 2. Enable the highlighter tool and move the focus to check for drawing errors. (especially drawn on the start menu)
Closes #19318 ### Summary of the issue: The log cannot be opened when log level is on Disabled. ### Description of user facing changes: The log can be opened when log level is on Disabled. ### Description of developer facing changes: N/A ### Description of development approach: When log is disabled, just open the log as if we had clicked the corresponding NVDA menu item. ### Testing strategy: Manual test with: * Changing the log level in the settings dialog * starting with `-l 100` flag ### Known issues with pull request: No test performed with `--no-logging` flag due to #19333.
Closes #19211 ### Summary of the issue: There was no command to toggle keyboard layout (desktop / laptop). It may be useful for testing, or for someone switching between built-in and external keyboard. ### Description of user facing changes: * Added an unassigned command to toggle keyboard layout. ### Description of developer facing changes: N/A ### Description of development approach: Added the command script in `globalCommands.py`. ### Testing strategy: Manual test ### Known issues with pull request: None
### Summary of the issue: Updated actions/cache@v4 to actions/cache@v5 ### Description of user facing changes: none ### Description of developer facing changes: Update /.github/workflows/testAndPublish.yml file actions/cache@version ### Description of development approach: Update /.github/workflows/testAndPublish.yml file ### Testing strategy: Because GitHub Actions' stability has been quite poor recently, the build didn't succeed on the first attempt, so we need to carefully test whether it can compile successfully.
[actions/upload-artifact Notes](https://github.com/actions/upload-artifact/releases/tag/v6.0.0) [download-artifact Notes](https://github.com/actions/download-artifact/releases/tag/v7.0.0)
…ments with a height less than 0. #19384 Fixes: #19383 Summary of the issue: The highlighter gets an error getting a rectangle of objects with heights less than 0. This is because we are not handling the ValueError exception thrown by locationHelper.RectLTRB. Description of user facing changes: The highlighter does not report an error when it encounters an object with a height less than 0. Description of developer facing changes: Description of development approach: Handle ValueError exception when NVDAHighlighter.updateContextRect gets the context rectangle
) Fix-up of #19354 Summary of the issue: In the PR to start 2026.2 dev cycle, the new 2026.2 section has been created, but the markdown disable instruction has remained below 2026.1 section. Description of user facing changes: None Description of developer facing changes: Moved the instruction to disable markdown linting below 2026.2 section.
Fixes #19395 Fix-up of #19173. Summary of the issue: Sometimes, e.g. in Notepad, skim reading process was not correctly interrupted when pressing control key: say all was restarting when another key was pressed. Description of user facing changes: Skim reading process is now correctly interrupted when control is pressed. Description of developer facing changes: N/A Description of development approach: When the speech sequence is stored, it is first filtered. CallbackCommands are filtered out of the sequence since callback functions such as say all ones should not be called again when repeating the last speech (this was the cause of say all restarting). Not all BaseCallbackCommands are filtered since other BaseCallbackCommand such as BeepCommand (for indentation reporting) or WaveFileCommands (for spelling error reporting) still need to be reported. I have not included IndexCommands in the filtering since in any case, they only seem to appear downstream, in the speech manager part. Regarding CancellableSpeechCommands, I have included them, since I've seen that they are also filtered out from remote speech. Though, I do not exactly know how cancellable speech works, so please double check. Thanks.
…) (#19394) Fixes #19386 Summary of the issue: When using UIA to access Microsoft Word documents, page change announcements do not occur when navigating between table rows that span different pages. Page changes are only announced after exiting the table. This does not occur in IAccessible mode ("only where necessary" setting), where page changes are announced correctly within tables. Description of user facing changes: When navigating table rows in Word documents using UIA, NVDA will now correctly announce page changes (e.g., "page 2") when moving between rows on different pages. Description of developer facing changes: Description of development approach: The WordDocumentTextInfo._getFormatFieldAtRange method now retrieves page numbers via Word's custom attribute API (UIACustomAttributeID.PAGE_NUMBER), similar to how line numbers and section numbers are already retrieved. The fallback mechanism in getTextWithFields has been updated to only propagate page numbers from control elements when UIARemote is not supported, preserving the more accurate custom attribute values.
Fixes #17005 Summary of the issue: Currently, slider controls (HTML range inputs and ARIA sliders) are not included in browse mode navigation. Users cannot navigate to sliders using quick navigation keys. Description of user facing changes: Slider controls are now included in browse mode navigation. Users can navigate to sliders using quick navigation. By default, no gesture is assigned. Description of developer facing changes: Added "slider" node type to browseMode.py base implementation; Implemented slider detection for: Gecko (Firefox) virtual buffers, MSHTML (Internet Explorer) virtual buffers, UIA (Edge, modern UI) browsers, Chromium (Chrome) IAccessible implementation. Updated changes.md documentation. Description of development approach: Extended the existing browse mode navigation framework to recognize slider controls; Used existing control type detection patterns (ARIA roles, HTML input types, UIA control types); Followed the same pattern as other form controls (checkbox, radio button, etc.).
…contains only hidden content (#19409) Summary of the issue: When a form control (such as a checkbox or radio button) has both: An aria-label attribute providing the accessible name A <label for="..."> element whose content is entirely aria-hidden NVDA's browse mode in Firefox fails to announce the accessible name. The name is correctly announced in focus mode. Example HTML that reproduces the issue: <input type="checkbox" id="testinput" aria-label="TestArea"> <label for="testinput"><span aria-hidden="true">Test</span></label> In Firefox browse mode, navigating to this checkbox announces only "check box not checked" with no name, even though the accessible name is "TestArea" from aria-label. The root cause is in getLabelInfo() which determines if a control's label is "visible" by checking IA2_RELATION_LABELLED_BY targets. It only checked if the label element had STATE_SYSTEM_INVISIBLE, but a label element can be visible while containing only aria-hidden content, meaning it contributes no accessible text to the virtual buffer. This caused NVDA to incorrectly assume the user would read the label content in browse mode, so it didn't force the aria-label name to be announced. It could be argued that exposing the labelled by association even if the name is set using aria-label is a bug in Firefox, since the label element is no longer contributing to the accessible name of the element and that it should be fixed there. I'm willing to open a Firefox bug for this if preferred. Description of user facing changes: Form controls with aria-label will now correctly have their accessible name announced in browse mode, even when an associated <label for> element exists but contains only hidden content.
… of page (#19424) Fixes #19423 ### Summary of the issue: When using UIA to access Microsoft Word documents, NVDA reports "page -1" when navigating to the final line of a page. This regression was introduced in PR #19394 which added support for retrieving page numbers via Word's Custom Attributes API. The issue occurs because Word's Custom Attributes API returns `-1` when the page number value is not yet available. The original code accepted any integer value without validation, causing NVDA to announce "page -1" to users. ### Description of user facing changes: NVDA will now correctly announce the page number (e.g., "page 2") instead of "page -1" when reaching the final line of a page. ### Description of developer facing changes: N/A ### Description of development approach: The fix implements a two-layer validation and fallback mechanism: 1. **Custom Attributes API Validation**: Page numbers from the Custom Attributes API are now validated to reject invalid values (< 1). When Word returns -1, the value is not used. 2. **Enhanced Fallback Mechanism**: The existing control field fallback (which uses automation IDs like `UIA_AutomationId_Word_Page_2`) now: - Runs regardless of UIARemote support status (previously it was disabled when UIARemote was supported) - Only propagates page numbers from control fields, not format fields - Only fills in missing page numbers, preserving valid Custom Attributes API values - Converts control field page numbers (strings) to integers to match Custom Attributes API type This ensures type consistency and prevents false page change detections due to type mismatches between string `"2"` and integer `2`. Since this is a fixup pr, I did not include a changelog entry. ### Testing strategy: Manual testing with: - Multi-page Word documents - Forward navigation (down arrow) - page changes announced correctly - Backward navigation (up arrow) - page changes announced correctly - Navigation within tables - continues to work as fixed in #19394 - Navigation outside tables - now works correctly in both directions ### Known issues with pull request: None known
### Summary of the issue: Currently, failing type checks in CI only output errors and warning to the [workflow summary](https://github.com/nvaccess/nvda/actions/runs/20938000634/attempts/1#summary-60166146854), rather than the [job run details](https://github.com/nvaccess/nvda/actions/runs/20938000634/job/60166146854?pr=19432#step:5:26). ### Description of user facing changes: None ### Description of developer facing changes: Type checking failures in CI output details to both locations, making them easier to find. ### Description of development approach: Tee the output of running pyright rather than saving it directly to a variable. ### Testing strategy: Ran `ci/scripts/test/typeCheck.ps1` locally on a branch with pyright violations. ### Known issues with pull request: None known.
…when available instead of the legacy model (#19367) <!-- 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 #13517. ### Summary of the issue: NVDA exclusively uses Word's legacy object model for sentence navigation, even when UIA is enabled. ### Description of how this pull request fixes the issue: Added support for the [UIA custom extension](https://docs.microsoft.com/en-gb/office/uia/word/wordcustompatterns) to move and expand by sentence in supported scenarios. The legacy implementation remains as a fallback on systems without remote ops support (Windows below 11/Cobalt platform) or older Office versions. ### Testing strategy: Moved by sentence in a large document and verified functionality.
Closes #12539 Summary of the issue: This pull request introduces a new NVDA magnifier feature, including docked and lens magnifier modes, color filter support, and a set of global commands for controlling magnification. The changes add new classes for handling magnifier windows, provide optimized color filtering, and implement keyboard shortcuts for toggling magnification, zooming, cycling modes, and color filters. Description of user facing changes: Implemented new script commands in globalCommands.py for starting/stopping the magnifier, zooming in/out, cycling color filters, toggling fullscreen mode, cycling magnifier types, and spotlighting the magnifier window, each with descriptive messages and gestures. Description of developer facing changes: No significant changes. A new displayChanged extension point under winAPI._displayTracking, which notifies handlers of display configuration changes. Description of development approach: Introduced the main magnifier module with initialization, activation, and shutdown logic in __init__.py, supporting only full-screen magnification for now. Added a FullScreenMagnifier class implementing full-screen magnification, handling zoom, color filters, mouse centering, and spotlight mode, interfacing with the Windows Magnification API. Implemented keyboard command handlers for toggling the magnifier, zooming, cycling color filters, changing full-screen modes, and starting spotlight mode in commands.py. Added a configuration module (config.py) to manage default zoom level, color filter, full-screen mode, and mouse centering settings, with utilities for retrieving and setting these values.
63db804 to
e7187c5
Compare
Contributor
Author
|
Replaced by #19476. Once more again, sorry for the noise. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updated Bosnian
characterDescriptions.dicfile.