From f227ca64c7f4cb41f83f531436c6dd11cf3c1d58 Mon Sep 17 00:00:00 2001 From: Sean Budd Date: Thu, 1 Aug 2024 10:43:56 +1000 Subject: [PATCH] Fix whitespaces --- .github/ISSUE_TEMPLATE/bug_report.md | 6 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/ISSUE_TEMPLATE/special_case_issue.md | 11 +- .github/PULL_REQUEST_TEMPLATE.md | 6 +- CODE_OF_CONDUCT.md | 14 +- appveyor/README.md | 10 +- include/espeak.md | 2 +- nvdaHelper/common/PerfTimer.cpp | 4 +- nvdaHelper/common/PerfTimer.h | 2 +- nvdaHelper/common/apiHook.cpp | 4 +- nvdaHelper/common/apiHook.h | 8 +- nvdaHelper/common/libraryLoader.h | 3 +- nvdaHelper/common/lock.h | 2 +- nvdaHelper/common/winIPCUtils.cpp | 2 +- nvdaHelper/common/winIPCUtils.h | 3 +- nvdaHelper/local/UIAEventLimiter/api.cpp | 4 +- .../local/UIAEventLimiter/eventRecord.h | 4 +- .../rateLimitedEventHandler.cpp | 10 +- .../UIAEventLimiter/rateLimitedEventHandler.h | 10 +- nvdaHelper/local/UIAEventLimiter/utils.h | 8 +- nvdaHelper/local/UIAUtils.h | 1 - nvdaHelper/local/dllImportTableHooks.h | 4 +- nvdaHelper/local/mixer.cpp | 2 +- nvdaHelper/local/nvdaControllerInternal.c | 6 +- nvdaHelper/local/oleUtils.cpp | 2 +- nvdaHelper/local/rpcSrv.h | 2 +- nvdaHelper/readme.md | 8 +- nvdaHelper/remote/COMProxyRegistration.cpp | 10 +- nvdaHelper/remote/COMProxyRegistration.h | 5 +- nvdaHelper/remote/WinWord/Fields.cpp | 8 +- nvdaHelper/remote/WinWord/Fields.h | 2 +- nvdaHelper/remote/displayModel.cpp | 16 +- nvdaHelper/remote/displayModel.h | 14 +- nvdaHelper/remote/displayModelRemote.cpp | 2 +- nvdaHelper/remote/excel.cpp | 12 +- nvdaHelper/remote/excel/Constants.h | 2 +- nvdaHelper/remote/gdiHooks.cpp | 54 +++--- nvdaHelper/remote/gdiHooks.h | 4 +- nvdaHelper/remote/ia2LiveRegions.cpp | 10 +- nvdaHelper/remote/ime.cpp | 42 ++--- nvdaHelper/remote/inProcess.cpp | 4 +- nvdaHelper/remote/injection.cpp | 18 +- nvdaHelper/remote/inputLangChange.cpp | 2 +- nvdaHelper/remote/inputLangChange.h | 2 +- nvdaHelper/remote/log.cpp | 4 +- nvdaHelper/remote/outlook.cpp | 6 +- nvdaHelper/remote/rpcSrv.cpp | 2 +- nvdaHelper/remote/sysListView32.cpp | 2 +- nvdaHelper/remote/tsf.cpp | 4 +- nvdaHelper/remote/typedCharacter.cpp | 4 +- nvdaHelper/remote/typedCharacter.h | 2 +- nvdaHelper/remote/vbufRemote.cpp | 6 +- nvdaHelper/remote/winword.cpp | 4 +- nvdaHelper/remote/winword.h | 2 +- nvdaHelper/remoteLoader/loader.cpp | 2 +- .../adobeAcrobat/adobeAcrobat.cpp | 15 +- .../vbufBackends/gecko_ia2/gecko_ia2.cpp | 28 +-- .../lotusNotesRichText/lotusNotesRichText.cpp | 2 +- nvdaHelper/vbufBackends/mshtml/mshtml.cpp | 24 +-- nvdaHelper/vbufBackends/mshtml/mshtml.h | 2 +- nvdaHelper/vbufBackends/mshtml/node.cpp | 4 +- nvdaHelper/vbufBackends/mshtml/node.h | 2 +- nvdaHelper/vbufBackends/webKit/webKit.cpp | 2 +- nvdaHelper/vbufBase/backend.cpp | 8 +- nvdaHelper/vbufBase/backend.h | 10 +- nvdaHelper/vbufBase/storage.cpp | 32 ++-- nvdaHelper/vbufBase/storage.h | 66 +++---- nvdaHelper/vbufBase/utils.cpp | 2 +- projectDocs/community/releaseProcess.md | 6 +- .../design/hidBrailleTechnicalNotes.md | 16 +- projectDocs/design/startupShutdown.md | 4 +- projectDocs/design/technicalDesignOverview.md | 22 +-- projectDocs/dev/buildSystemNotes.md | 6 +- projectDocs/dev/buildingNVDAOnAppVeyor.md | 2 +- projectDocs/dev/contributing.md | 2 +- projectDocs/dev/createDevEnvironment.md | 4 +- projectDocs/dev/deprecations.md | 4 +- .../dev/developerGuide/developerGuide.md | 70 ++++---- projectDocs/dev/featureFlags.md | 2 +- ...llRequestTemplateExplanationAndExamples.md | 8 +- projectDocs/dev/selfSignedBuild.md | 2 +- ...thubIssueTemplateExplanationAndExamples.md | 6 +- projectDocs/issues/triage.md | 6 +- projectDocs/product_vision.md | 20 +-- projectDocs/translating/readme.md | 4 +- security.md | 3 +- source/UIAHandler/_remoteOps/readme.md | 24 +-- ...DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py | 165 +++++++++--------- source/comInterfaces/readme.md | 2 +- source/fonts/readme.md | 1 - tests/system/readme.md | 10 +- user_docs/en/changes.md | 109 ++++++------ venvUtils/ensureAndActivate.bat | 4 +- venvUtils/venvCmd.bat | 2 +- 94 files changed, 538 insertions(+), 548 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 540ffc99159..7e74ed4c88e 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -8,7 +8,7 @@ about: Create a report to help us improve Please thoroughly read NVDA's wiki article on how to fill in this template, including how to provide the required files. Issues may be closed if the required information is not present. https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/githubIssueTemplateExplanationAndExamples.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 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. Each of the questions and sections below start with multiple hash symbols (#). Place your answers and information on the blank line below each question. --> @@ -17,14 +17,14 @@ Each of the questions and sections below start with multiple hash symbols (#). P ### Actual behavior: ### Expected behavior: diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index df6ae16ab7b..a9c89d848cb 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -8,7 +8,7 @@ about: Suggest an idea for this project Please thoroughly read NVDA's wiki article on how to fill in this template, including how to provide the required files. Issues may be closed if the required information is not present. https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/githubIssueTemplateExplanationAndExamples.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 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. Each of the questions and sections below start with multiple hash symbols (#). Place your answers and information on the blank line below each question. --> diff --git a/.github/ISSUE_TEMPLATE/special_case_issue.md b/.github/ISSUE_TEMPLATE/special_case_issue.md index 6292223d421..e81998e3eaf 100644 --- a/.github/ISSUE_TEMPLATE/special_case_issue.md +++ b/.github/ISSUE_TEMPLATE/special_case_issue.md @@ -5,23 +5,23 @@ about: A complex or exceptional issue that doesn't fit into the usual templates --- @@ -47,4 +47,3 @@ Please place your answers and information on the blank line below each question. ### Additional information (if applicable) - diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 150e3cbef41..dff9547c1f2 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,9 +1,9 @@ @@ -42,7 +42,7 @@ https://github.com/nvaccess/nvda/blob/master/projectDocs/dev/githubPullRequestTe - System (end to end) tests - Manual testing - [ ] UX of all users considered: - - Speech + - Speech - Braille - Low Vision - Different web browsers diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 2ce1d0550a1..71f9463da8f 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -3,10 +3,10 @@ ## 1. Purpose A primary goal of NV Access and NVDA is to be inclusive to the largest number of contributors, with the most varied and diverse backgrounds possible. As such, we are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, ability, ethnicity, nationality, socioeconomic status, education, level of experience and religion (or lack thereof). This code of conduct outlines our expectations for all those who participate in our community, as well as the consequences for unacceptable behaviour. -We invite all those who participate in the NVDA community to help us create safe and positive experiences for everyone. NVDA is a user driven initiative. +We invite all those who participate in the NVDA community to help us create safe and positive experiences for everyone. NVDA is a user driven initiative. ## 2. Open Source Citizenship -A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognise and strengthen the relationships between our actions and their effects on our community. +A supplemental goal of this Code of Conduct is to increase open source citizenship by encouraging participants to recognise and strengthen the relationships between our actions and their effects on our community. Communities mirror the societies in which they exist and positive action is essential to counteract the many forms of inequality and abuses of power that exist in society. If you see someone who is making an extra effort to ensure our community is welcoming, friendly, and encourages all participants to contribute to the fullest extent, we want to know. @@ -45,21 +45,21 @@ If a community member engages in unacceptable behaviour, NV Access Staff may tak NV Access Staff have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviours that they deem inappropriate, threatening, offensive, or harmful. ## 6. Reporting Guidelines -If you are subject to or witness unacceptable behaviour, or have any other concerns, please notify NV Access staff as soon as possible via info@nvaccess.org. The information required for notifications includes PR/Issue Number, nature of breach, community member responsible, date and time of breach. Please note that the details of the reporter will not be disclosed, unless required to by law. +If you are subject to or witness unacceptable behaviour, or have any other concerns, please notify NV Access staff as soon as possible via info@nvaccess.org. The information required for notifications includes PR/Issue Number, nature of breach, community member responsible, date and time of breach. Please note that the details of the reporter will not be disclosed, unless required to by law. ## 7. Addressing Grievances -If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify NV Access at info@nvaccess.org with a concise description of your grievance. +If you feel you have been falsely or unfairly accused of violating this Code of Conduct, you should notify NV Access at info@nvaccess.org with a concise description of your grievance. ## 8. Scope We expect all community participants (contributors, paid or otherwise; sponsors; and other guests) to abide by this Code of Conduct in all community venues--online and in-person--as well as in all one-on-one communications pertaining to community business. -This code of conduct and its related procedures also applies to unacceptable behaviour occurring outside the scope of community activities when such behaviour has the potential to adversely affect the safety and well-being of community members. -For others setting up or running an NVDA group of any kind, it is strongly recommended that a complementary Citizen and Contributor Code of Conduct is adopted. +This code of conduct and its related procedures also applies to unacceptable behaviour occurring outside the scope of community activities when such behaviour has the potential to adversely affect the safety and well-being of community members. +For others setting up or running an NVDA group of any kind, it is strongly recommended that a complementary Citizen and Contributor Code of Conduct is adopted. ## 9. Contact info info@nvaccess.org ## 10. License and attribution -The Citizen and Contributor Code of Conduct is distributed by NV Access Limited. +The Citizen and Contributor Code of Conduct is distributed by NV Access Limited. Portions of text were derived from the GitHub sample Citizen and Contributor Code of Conduct, which is distributed under a Creative Commons Attribution-ShareAlike license. Revision history: diff --git a/appveyor/README.md b/appveyor/README.md index 87ae7e2948c..00457204eb8 100644 --- a/appveyor/README.md +++ b/appveyor/README.md @@ -1,4 +1,4 @@ -`appveyor.yml` specifies build settings which generally [override online UI driven settings](https://www.appveyor.com/docs/build-configuration/#appveyoryml-and-ui-coexistence). +`appveyor.yml` specifies build settings which generally [override online UI driven settings](https://www.appveyor.com/docs/build-configuration/#appveyoryml-and-ui-coexistence). # Branch and tag filtering @@ -12,7 +12,7 @@ Builds will fail if any command has a non-zero exit code. PowerShell scripts con ## Setup process -Before we begin the install process, AppVeyor clones our repository and checks out the commit of the build. +Before we begin the install process, AppVeyor clones our repository and checks out the commit of the build. ### `install` @@ -31,7 +31,7 @@ Performs a build of NVDA and related artifacts for testing and deployment. ## Testing -Unlike the rest of the build, tests do not exit early if they fail or raise an error. If any test fails, `testFailExitCode` is set to 1. The `after_test` build phase will exit the build if any tests fail so that all test failures can be recorded where possible. +Unlike the rest of the build, tests do not exit early if they fail or raise an error. If any test fails, `testFailExitCode` is set to 1. The `after_test` build phase will exit the build if any tests fail so that all test failures can be recorded where possible. Before testing we: @@ -48,9 +48,9 @@ The tests we perform are: ## Artifacts -Artifacts are added to the build throughout the process. +Artifacts are added to the build throughout the process. -Artifacts in `output\*` and `output\*\*` are automatically packaged after successful tests. If something fails before then, we manually push these artifacts in `on_failure`. Artifacts outside of `output` are pushed manually as they are created. +Artifacts in `output\*` and `output\*\*` are automatically packaged after successful tests. If something fails before then, we manually push these artifacts in `on_failure`. Artifacts outside of `output` are pushed manually as they are created. At the end of the build, regardless of failure, we upload the list of successfully installed python packages in `pushPackagingInfo.ps1`. This is performed here in case scons (partially) fails. diff --git a/include/espeak.md b/include/espeak.md index 70015c90061..b4b68ec785c 100644 --- a/include/espeak.md +++ b/include/espeak.md @@ -64,7 +64,7 @@ If the last thing is compiling some dictionary try excluding it. This can be done in [`nvdaHelper/espeak/sconscript`](../nvdaHelper/espeak/sconscript). Remember to report this to the eSpeak-ng project. -If the build fails, take note of the error, compare the diff of the `Makefile.am` file and mirror +If the build fails, take note of the error, compare the diff of the `Makefile.am` file and mirror any changes in our `sconscript` file. ### Known issues diff --git a/nvdaHelper/common/PerfTimer.cpp b/nvdaHelper/common/PerfTimer.cpp index 9236a0c02c2..4d754188cef 100644 --- a/nvdaHelper/common/PerfTimer.cpp +++ b/nvdaHelper/common/PerfTimer.cpp @@ -64,7 +64,7 @@ std::string PerfTimer::GetPerfResults() { std::stringstream sstream; sstream << "Perf Results\n"; for(auto& result : perfResults){ - sstream << result.first << " Total time: " << result.second.totalTime + sstream << result.first << " Total time: " << result.second.totalTime << " Hit count: " << result.second.numberOfHits; if(result.second.totalTime > 0 && result.second.numberOfHits > 0) { sstream << " Average Time: " << result.second.totalTime / result.second.numberOfHits; @@ -72,4 +72,4 @@ std::string PerfTimer::GetPerfResults() { sstream << '\n'; } return sstream.str(); -} \ No newline at end of file +} diff --git a/nvdaHelper/common/PerfTimer.h b/nvdaHelper/common/PerfTimer.h index 4664fd7a00f..531c180b026 100644 --- a/nvdaHelper/common/PerfTimer.h +++ b/nvdaHelper/common/PerfTimer.h @@ -68,4 +68,4 @@ class PerfTimer { static std::map s_results; ///< The results being collected. }; -#endif \ No newline at end of file +#endif diff --git a/nvdaHelper/common/apiHook.cpp b/nvdaHelper/common/apiHook.cpp index e1cd228de43..e684b596963 100644 --- a/nvdaHelper/common/apiHook.cpp +++ b/nvdaHelper/common/apiHook.cpp @@ -14,7 +14,7 @@ This license can be found at: #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include #include @@ -66,7 +66,7 @@ bool apiHook_commitTransaction() { if (res != NO_ERROR) { LOG_ERROR("DetourTransactionCommit failed with " << res << " due to variable at address 0X" << std::hex << failedPointerRef << " that should hold a function pointer"); return false; - } + } LOG_DEBUG("DetourTransactionCommit succeeded"); return TRUE; } diff --git a/nvdaHelper/common/apiHook.h b/nvdaHelper/common/apiHook.h index 4c2cfa8f602..7f62f708236 100644 --- a/nvdaHelper/common/apiHook.h +++ b/nvdaHelper/common/apiHook.h @@ -18,16 +18,16 @@ This license can be found at: /** * Initializes an API hooking transaction. * @return success flag - */ + */ bool apiHook_beginTransaction(); /** - * Requests that the given function from the given module should be hooked with the given hook procedure. + * Requests that the given function from the given module should be hooked with the given hook procedure. * Warning, this function has no safety checks, you should usually use the apiHook_hookFunction_safe template * @param realFunction the function you wish to hook. * @param fakeFunction the function you wish to be called instead of the original one. * @param targetPointerRef Pointer variable that will contain a pointer to the original function after hooking. This is used to unhook. - */ + */ bool apiHook_hookFunction(void* realFunction, void* fakeFunction, void** targetPointerRef); /** @@ -36,7 +36,7 @@ bool apiHook_hookFunction(void* realFunction, void* fakeFunction, void** targetP * @param realFunction the function you wish to hook. * @param fakeFunction the function you wish to be called instead of the original one. * @param targetPointerRef Pointer variable that will contain a pointer to the original function after hooking. This is used to unhook. -*/ +*/ template bool apiHook_hookFunction_safe(funcType realFunction, funcType fakeFunction, funcType* targetPointerRef) { return apiHook_hookFunction( diff --git a/nvdaHelper/common/libraryLoader.h b/nvdaHelper/common/libraryLoader.h index dd17055c106..6c44927a586 100644 --- a/nvdaHelper/common/libraryLoader.h +++ b/nvdaHelper/common/libraryLoader.h @@ -17,7 +17,7 @@ This license can be found at: // A Smart Library handle. // Construct it with a handle returned by LoadLibrary or similar. -// Once the object goes out of scope, FreeLibrary will automatically be called on the handle. +// Once the object goes out of scope, FreeLibrary will automatically be called on the handle. class CLoadedLibrary { private: HMODULE _hModule {nullptr}; @@ -54,4 +54,3 @@ class CLoadedLibrary { } }; - diff --git a/nvdaHelper/common/lock.h b/nvdaHelper/common/lock.h index 252a1eeabc1..440a60e9592 100644 --- a/nvdaHelper/common/lock.h +++ b/nvdaHelper/common/lock.h @@ -118,4 +118,4 @@ long incRef() { }; -#endif \ No newline at end of file +#endif diff --git a/nvdaHelper/common/winIPCUtils.cpp b/nvdaHelper/common/winIPCUtils.cpp index 7ad3e2bba01..b7a0bb354e2 100644 --- a/nvdaHelper/common/winIPCUtils.cpp +++ b/nvdaHelper/common/winIPCUtils.cpp @@ -15,7 +15,7 @@ This license can be found at: #include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include "winIPCUtils.h" diff --git a/nvdaHelper/common/winIPCUtils.h b/nvdaHelper/common/winIPCUtils.h index 177d48769d3..7cc60cfac9f 100644 --- a/nvdaHelper/common/winIPCUtils.h +++ b/nvdaHelper/common/winIPCUtils.h @@ -18,7 +18,7 @@ This license can be found at: #ifdef __cplusplus extern "C" { #endif - + #include /** @@ -33,4 +33,3 @@ size_t generateDesktopSpecificNamespace(wchar_t* buf, size_t cch); #endif #endif - \ No newline at end of file diff --git a/nvdaHelper/local/UIAEventLimiter/api.cpp b/nvdaHelper/local/UIAEventLimiter/api.cpp index bc9af47f9cd..cdc1ff6485a 100644 --- a/nvdaHelper/local/UIAEventLimiter/api.cpp +++ b/nvdaHelper/local/UIAEventLimiter/api.cpp @@ -22,7 +22,7 @@ std::set activeRateLimitedEventHandlers; HRESULT rateLimitedUIAEventHandler_create(IUnknown* pExistingHandler, RateLimitedEventHandler** ppRateLimitedEventHandler) { LOG_DEBUG(L"rateLimitedUIAEventHandler_create called"); if(!pExistingHandler || !ppRateLimitedEventHandler) { - LOG_ERROR(L"rateLimitedUIAEventHandler_create: one or more NULL arguments"); + LOG_ERROR(L"rateLimitedUIAEventHandler_create: one or more NULL arguments"); return E_INVALIDARG; } @@ -39,7 +39,7 @@ HRESULT rateLimitedUIAEventHandler_create(IUnknown* pExistingHandler, RateLimite // @brief Terminates a RateLimitedEventHandler instance's flusher thread and removes it from the activeRateLimitedEventHandlers set. // @param pRateLimitedEventHandler the RateLimitedEventHandler instance to terminate. -// @note This function will block until the RateLimitedEventHandler's flusher thread has terminated. +// @note This function will block until the RateLimitedEventHandler's flusher thread has terminated. // @return S_OK on success or a failure code otherwise HRESULT rateLimitedUIAEventHandler_terminate(RateLimitedEventHandler* pRateLimitedEventHandler) { if (activeRateLimitedEventHandlers.find(pRateLimitedEventHandler) == activeRateLimitedEventHandlers.end()) { diff --git a/nvdaHelper/local/UIAEventLimiter/eventRecord.h b/nvdaHelper/local/UIAEventLimiter/eventRecord.h index 3570666a63d..a7027628874 100644 --- a/nvdaHelper/local/UIAEventLimiter/eventRecord.h +++ b/nvdaHelper/local/UIAEventLimiter/eventRecord.h @@ -26,7 +26,7 @@ This license can be found at: // which is used to detect and remove duplicate events. // The key is made up of the element's runtime ID, // plus any extra event params that make the event unique, -// E.g. event ID, property ID etc. +// E.g. event ID, property ID etc. struct AutomationEventRecord_t { CComPtr sender; @@ -98,7 +98,7 @@ using EventRecordVariant_t = std::variant concept EventRecordConstraints = requires(T t) { { t.generateCoalescingKey() } -> std::same_as>; diff --git a/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.cpp b/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.cpp index dbc091290dd..bec9dbc0b44 100644 --- a/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.cpp +++ b/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.cpp @@ -43,11 +43,11 @@ HRESULT RateLimitedEventHandler::queueEvent(EventRecordArgTypes&&... args) { auto coalescingKey = record.generateCoalescingKey(); auto existingKeyIter = m_eventRecordsByKey.find(coalescingKey); if(existingKeyIter != m_eventRecordsByKey.end()) { - LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: found existing event with same key"); + LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: found existing event with same key"); auto& [existingRecordVarIter,existingCoalesceCount] = existingKeyIter->second; LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: updating key and count to "<<(existingCoalesceCount+1)); existingKeyIter->second = {recordVarIter, existingCoalesceCount + 1}; - LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: erasing old item"); + LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: erasing old item"); m_eventRecords.erase(existingRecordVarIter); } else { LOG_DEBUG(L"RateLimitedUIAEventHandler::queueEvent: Adding key"); @@ -58,7 +58,7 @@ HRESULT RateLimitedEventHandler::queueEvent(EventRecordArgTypes&&... args) { m_needsFlush = true; m_flushConditionVar.notify_one(); } - } // m_mtx released. + } // m_mtx released. return S_OK; } @@ -156,9 +156,9 @@ RateLimitedEventHandler::~RateLimitedEventHandler() { RateLimitedEventHandler::RateLimitedEventHandler(IUnknown* pExistingHandler): m_pExistingAutomationEventHandler(pExistingHandler), - m_pExistingFocusChangedEventHandler(pExistingHandler), + m_pExistingFocusChangedEventHandler(pExistingHandler), m_pExistingPropertyChangedEventHandler(pExistingHandler), - m_pExistingNotificationEventHandler(pExistingHandler), + m_pExistingNotificationEventHandler(pExistingHandler), m_pExistingActiveTextPositionChangedEventHandler(pExistingHandler), m_flusherThread([this](std::stop_token st){ this->flusherThreadFunc(st); }) { diff --git a/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.h b/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.h index 3278d810778..8b3401a1c9c 100644 --- a/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.h +++ b/nvdaHelper/local/UIAEventLimiter/rateLimitedEventHandler.h @@ -20,7 +20,7 @@ This license can be found at: #include "eventRecord.h" -// @brief a class that listens for various UI Automation events, +// @brief a class that listens for various UI Automation events, // stores them in in an internal queue (removing any duplicates), // and sends them onto an existing UI Automation event handler in a separate thread. // This ensures that UI Automation core is never blocked while sending events to this class. @@ -49,15 +49,15 @@ class RateLimitedEventHandler: /// @param stopToken used to check if the thread should stop. void flusherThreadFunc(std::stop_token stopToken); - /// @brief a template function that queues a UI Automation event. - /// @tparam EventRecordClass the type of event record representing a UI Automation event. + /// @brief a template function that queues a UI Automation event. + /// @tparam EventRecordClass the type of event record representing a UI Automation event. /// @tparam ...EventRecordArgTypes the argument types required to construct the event record /// @param ...args the arguments to construct the event record. /// @return S_OK on success or a failure code otherwise. template HRESULT queueEvent(EventRecordArgTypes&&... args); /// @brief Emits a UI Automation event to its existing handler. - /// @param record the event record representing the UI automation event. + /// @param record the event record representing the UI automation event. /// @return S_OK on success or a failure code otherwise. HRESULT emitEvent(const AutomationEventRecord_t& record) const; HRESULT emitEvent(const FocusChangedEventRecord_t& record) const; @@ -72,7 +72,7 @@ class RateLimitedEventHandler: public: - /// @brief class constructor. + /// @brief class constructor. /// @param pExistingHandler a pointer to an existing UI Automation event handler where events should be sent after they are flushed from the queue. RateLimitedEventHandler(IUnknown* pExistingHandler); diff --git a/nvdaHelper/local/UIAEventLimiter/utils.h b/nvdaHelper/local/UIAEventLimiter/utils.h index 2e55486e627..e20be160f93 100644 --- a/nvdaHelper/local/UIAEventLimiter/utils.h +++ b/nvdaHelper/local/UIAEventLimiter/utils.h @@ -21,13 +21,13 @@ This license can be found at: #include /// @brief creates a vector of ints from a SAFEARRAY. -/// @param pSafeArray -/// @return the vector of ints. +/// @param pSafeArray +/// @return the vector of ints. std::vector SafeArrayToVector(SAFEARRAY* pSafeArray); /// @brief Fetches the runtimeID from a given uI Automation element. /// @param pElement the UI Automation element whose runtime ID should be fetched. -/// @return the runtime ID from the element. +/// @return the runtime ID from the element. std::vector getRuntimeIDFromElement(IUIAutomationElement* pElement); // @brief a helper template function for the supports_alternative concept. @@ -36,7 +36,7 @@ constexpr bool supports_alternative_impl(std::index_sequence) { return (std::same_as> || ...); } -// @brief a concept that checks if a given type can be held by a given variant type. +// @brief a concept that checks if a given type can be held by a given variant type. // @tparam T the type to check // @tparam V the variant type to check template diff --git a/nvdaHelper/local/UIAUtils.h b/nvdaHelper/local/UIAUtils.h index 1564e6f9458..03f2e7a8261 100644 --- a/nvdaHelper/local/UIAUtils.h +++ b/nvdaHelper/local/UIAUtils.h @@ -12,4 +12,3 @@ int registerUIAAnnotationType(GUID* guid); #endif - diff --git a/nvdaHelper/local/dllImportTableHooks.h b/nvdaHelper/local/dllImportTableHooks.h index dd408616a71..5825ac05fdb 100644 --- a/nvdaHelper/local/dllImportTableHooks.h +++ b/nvdaHelper/local/dllImportTableHooks.h @@ -34,12 +34,12 @@ class DllImportTableHooks { DllImportTableHooks(HMODULE targetModule); /** - * Requests that the given function from the given module should be hooked with the given hook procedure. Note that hooking does not automatically take place when this function is called, so this function can be called many times before the actual hooking can be done in bulk with apiHooks_hookFunctions. + * Requests that the given function from the given module should be hooked with the given hook procedure. Note that hooking does not automatically take place when this function is called, so this function can be called many times before the actual hooking can be done in bulk with apiHooks_hookFunctions. * @param moduleName the name of the module the function you wish to hook is located in. * @param functionName the name of the function you wish to hook. * @param newHookProc the function you wish to be called instead of the original one. * @return the address of the original function. You could use this to call the origianl function from with in your replacement. - */ + */ void* requestFunctionHook(const char* moduleName, const char* functionName, void* newHookProc); /** diff --git a/nvdaHelper/local/mixer.cpp b/nvdaHelper/local/mixer.cpp index 818b9f2229f..7020d1d3590 100644 --- a/nvdaHelper/local/mixer.cpp +++ b/nvdaHelper/local/mixer.cpp @@ -26,7 +26,7 @@ _COM_SMARTPTR_TYPEDEF(IAudioMeterInformation, __uuidof(IAudioMeterInformation)); /* * Should NVDA delay speech slightly when beginning to duck other audio? - * @return true if other audio is playing or there is an error for any device. Or in other words, false only if all devices can be checked, and they all have a peak of 0. + * @return true if other audio is playing or there is an error for any device. Or in other words, false only if all devices can be checked, and they all have a peak of 0. */ bool audioDucking_shouldDelay() { HRESULT res; diff --git a/nvdaHelper/local/nvdaControllerInternal.c b/nvdaHelper/local/nvdaControllerInternal.c index d9a04ffa6db..8281a161d63 100644 --- a/nvdaHelper/local/nvdaControllerInternal.c +++ b/nvdaHelper/local/nvdaControllerInternal.c @@ -24,7 +24,7 @@ error_status_t __stdcall nvdaControllerInternal_inputLangChangeNotify(const long return _nvdaControllerInternal_inputLangChangeNotify(threadID,hkl,layoutString); } -error_status_t(__stdcall *_nvdaControllerInternal_typedCharacterNotify)(const wchar_t); +error_status_t(__stdcall *_nvdaControllerInternal_typedCharacterNotify)(const wchar_t); error_status_t __stdcall nvdaControllerInternal_typedCharacterNotify(const wchar_t ch) { return _nvdaControllerInternal_typedCharacterNotify(ch); } @@ -36,7 +36,7 @@ error_status_t __stdcall nvdaControllerInternal_logMessage(const long level, con } error_status_t(__stdcall *_nvdaControllerInternal_displayModelTextChangeNotify)(const long, const long, const long, const long, const long); -error_status_t __stdcall nvdaControllerInternal_displayModelTextChangeNotify(const long hwnd, const long left, const long top, const long right, const long bottom) { +error_status_t __stdcall nvdaControllerInternal_displayModelTextChangeNotify(const long hwnd, const long left, const long top, const long right, const long bottom) { return _nvdaControllerInternal_displayModelTextChangeNotify(hwnd,left,top,right,bottom); } @@ -71,7 +71,7 @@ error_status_t __stdcall nvdaControllerInternal_installAddonPackageFromPath(cons } error_status_t(__stdcall *_nvdaControllerInternal_drawFocusRectNotify)(const long, const long, const long, const long, const long); -error_status_t __stdcall nvdaControllerInternal_drawFocusRectNotify(const long hwnd, const long left, const long top, const long right, const long bottom) { +error_status_t __stdcall nvdaControllerInternal_drawFocusRectNotify(const long hwnd, const long left, const long top, const long right, const long bottom) { return _nvdaControllerInternal_drawFocusRectNotify(hwnd,left,top,right,bottom); } diff --git a/nvdaHelper/local/oleUtils.cpp b/nvdaHelper/local/oleUtils.cpp index e09b7da7241..8e3451a0df6 100644 --- a/nvdaHelper/local/oleUtils.cpp +++ b/nvdaHelper/local/oleUtils.cpp @@ -19,7 +19,7 @@ This license can be found at: /* * Fetches a text representation of the given OLE data object * @param dataObject an IDataObject interface of an OLE object - * @param text a pointer to a BSTR which will hold the resulting text + * @param text a pointer to a BSTR which will hold the resulting text * @return S_OK on success or an OLE error code. */ HRESULT getOleClipboardText(IDataObject* dataObject, BSTR* text) { diff --git a/nvdaHelper/local/rpcSrv.h b/nvdaHelper/local/rpcSrv.h index 9ec5ae2bd42..d1cb670b454 100644 --- a/nvdaHelper/local/rpcSrv.h +++ b/nvdaHelper/local/rpcSrv.h @@ -19,5 +19,5 @@ This license can be found at: RPC_STATUS startServer(); RPC_STATUS stopServer(); - + #endif diff --git a/nvdaHelper/readme.md b/nvdaHelper/readme.md index b5d09c79597..9e3b6fea60d 100644 --- a/nvdaHelper/readme.md +++ b/nvdaHelper/readme.md @@ -24,13 +24,13 @@ For instance: #### nvdaHelperLocalWin10.dll Contains code specific to Windows 10 and above, that aides in accessing newer technologies such as Windows OneCore speech synthesis, the Windows in-built OCR service. -This code is mostly C++/WinRT. +This code is mostly C++/WinRT. #### nvdaHelperLocal.dll This dll is loaded directly in to NVDA. It provides the following features: * client stub methods for several RPC interfaces allowing NVDA to execute code in-process. These interfaces include nvdaInprocUtils, vbufBackends, and displayModel, which are implemented in nvdaHelperRemote.dll. -* Server stub methods for several RPC interfaces allowing in-process code to execute code in NVDA. These interfaces include nvdaController and nvdaControllerInternal. -* Functions to aide NVDA in hooking platform dlls to make their calls easier to cancel +* Server stub methods for several RPC interfaces allowing in-process code to execute code in NVDA. These interfaces include nvdaController and nvdaControllerInternal. +* Functions to aide NVDA in hooking platform dlls to make their calls easier to cancel * Several small utility functions that assist in processing text (which are faster in c++). #### NVDAHelperRemote.dll @@ -108,7 +108,7 @@ The `nvdaHelperDebugFlags` variable takes one or more of the following flags: The special keywords none and all can also be used in place of the individual flags. -An example follows that enables debug CRT and runtime checks +An example follows that enables debug CRT and runtime checks ```cmd scons source nvdaHelperDebugFlags=debugCRT,RTC diff --git a/nvdaHelper/remote/COMProxyRegistration.cpp b/nvdaHelper/remote/COMProxyRegistration.cpp index ecdce81dc1c..b5f95da9337 100644 --- a/nvdaHelper/remote/COMProxyRegistration.cpp +++ b/nvdaHelper/remote/COMProxyRegistration.cpp @@ -17,7 +17,7 @@ This license can be found at: #include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #define CINTERFACE #include #include @@ -62,7 +62,7 @@ COMProxyRegistration_t* registerCOMProxy(const wchar_t* dllPath) { LOG_ERROR(L"LoadLibrary failed for "<classObjectRegistrationCookie=dwCookie; // For all interfaces the proxy dll supports, register its CLSID as their proxy stub CLSID // pProxyInfo is a pointer to a list of ProxyFileInfo pointers. The last of them being NULL to denote the end of the list. - // There is no official documentation on this, but - // in dlldata.c generated by MIDL (E.g. for IAccessible2, ia2_data.c), you can see: + // There is no official documentation on this, but + // in dlldata.c generated by MIDL (E.g. for IAccessible2, ia2_data.c), you can see: // PROXYFILE_LIST_START, followed by REFERENCE_PROXY_FILE(IA2), followed by PROXYFILE_LIST_END. // In RPCProxy.h from the Windows SDK, PROXYFILE_LIST_START declairs an unsized array of ProxyFileInfo pointers, REFERENCE_PROXY_FILE fills in each ProxyFileInfo pointer, and PROXYFILE_LIST_END places a final 0 to terminate the list. // The reason it is a list is that multiple IDLs may be compiled into one proxy, and each IDL file gets its own ProxyFileInfo and therefore its own call to REFERENCE_PROXY_FILE diff --git a/nvdaHelper/remote/COMProxyRegistration.h b/nvdaHelper/remote/COMProxyRegistration.h index 558fadd1c5d..04e76409565 100644 --- a/nvdaHelper/remote/COMProxyRegistration.h +++ b/nvdaHelper/remote/COMProxyRegistration.h @@ -19,7 +19,7 @@ This license can be found at: #include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include @@ -27,7 +27,7 @@ This license can be found at: typedef struct { // The name of the interface (for debugging) std::wstring name; - // The unique identifier of the interface + // The unique identifier of the interface IID iid; // The CLSID of the original class object that handled creating / proxying of this interface. // Used when unregistering, so we can put things back the way they were @@ -58,4 +58,3 @@ COMProxyRegistration_t* registerCOMProxy(const wchar_t* dllPath); bool unregisterCOMProxy(COMProxyRegistration_t* reg); #endif - diff --git a/nvdaHelper/remote/WinWord/Fields.cpp b/nvdaHelper/remote/WinWord/Fields.cpp index 1f989f6ad47..6980bd4c780 100644 --- a/nvdaHelper/remote/WinWord/Fields.cpp +++ b/nvdaHelper/remote/WinWord/Fields.cpp @@ -11,7 +11,7 @@ Copyright 2006-2010 NVDA contributers. This license can be found at: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include @@ -61,10 +61,10 @@ Fields::Fields(IDispatch* pRange) { Fields can be of many types, to get this we look at Type property. We care about: Ref - a Reference to some other part of the file Hyperlink - a link to another part of the file or to an external URL - + The following are defined on msdn (WdFieldType Enumeration - https://msdn.microsoft.com/en-us/library/office/ff192211.aspx) */ - const int CROSS_REFERENCE_TYPE_VALUE = 3; // wdFieldRef + const int CROSS_REFERENCE_TYPE_VALUE = 3; // wdFieldRef const int HYPERLINK_TYPE_VALUE = 88; // wdFieldHyperlink const int PAGE_NUMBER_TYPE_VALUE = 33; // wdFieldPage int type = -1; @@ -131,4 +131,4 @@ std::optional Fields::getEndOfPageNumberFieldAtIndex(const int index){ return std::optional(); } -} // end namespace WinWord \ No newline at end of file +} // end namespace WinWord diff --git a/nvdaHelper/remote/WinWord/Fields.h b/nvdaHelper/remote/WinWord/Fields.h index 4cac59af45c..35cc7d169a2 100644 --- a/nvdaHelper/remote/WinWord/Fields.h +++ b/nvdaHelper/remote/WinWord/Fields.h @@ -14,7 +14,7 @@ This license can be found at: #ifndef WINWORD_LINKS_H #define WINWORD_LINKS_H -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include diff --git a/nvdaHelper/remote/displayModel.cpp b/nvdaHelper/remote/displayModel.cpp index fc512d77da2..4c91cc38355 100644 --- a/nvdaHelper/remote/displayModel.cpp +++ b/nvdaHelper/remote/displayModel.cpp @@ -66,7 +66,7 @@ void displayModelChunk_t::truncate(int truncatePointX, BOOL truncateBefore) { wstring::iterator t=text.begin(); if(truncateBefore&&rect.leftformatInfo=formatInfo; chunk->direction=direction; chunk->characterXArray.push_back(rect.left); - for(unsigned int i=0;i<(text.length()-1);++i) chunk->characterXArray.push_back(characterExtents[i].x+rect.left); + for(unsigned int i=0;i<(text.length()-1);++i) chunk->characterXArray.push_back(characterExtents[i].x+rect.left); LOG_DEBUG(L"filled in chunk with rectangle from "<baseline,chunk->rect.left)]=chunk; - if(hwnd) chunk->hwnd=hwnd; + if(hwnd) chunk->hwnd=hwnd; } void displayModel_t::setFocusRect(const RECT* rect) { @@ -165,7 +165,7 @@ void displayModel_t::clearRectangle(const RECT& rect, BOOL clearForText) { } while(i!=chunksByYX.end()) { displayModelChunksByPointMap_t::iterator nextI=i; - ++nextI; + ++nextI; displayModelChunk_t* chunk=i->second; int baseline=i->first.first; if(IntersectRect(&tempRect,&rect,&(chunk->rect))) { @@ -230,7 +230,7 @@ void displayModel_t::clearRectangle(const RECT& rect, BOOL clearForText) { } void displayModel_t::copyRectangle(const RECT& srcRect, BOOL removeFromSource, BOOL opaqueCopy, BOOL srcInvert, const RECT& destRect, const RECT* destClippingRect, displayModel_t* destModel) { - //Make sure neither source or destination rectangle is collapsed. Pointless and can cause zero division errors. #2885 + //Make sure neither source or destination rectangle is collapsed. Pointless and can cause zero division errors. #2885 if(srcRect.left==srcRect.right||srcRect.top==srcRect.bottom||destRect.left==destRect.right||destRect.top==destRect.bottom) return; if(!destModel) destModel=this; RECT tempRect; @@ -244,8 +244,8 @@ void displayModel_t::copyRectangle(const RECT& srcRect, BOOL removeFromSource, B //Make copies of all the needed chunks, tweek their rectangle coordinates, truncate if needed, and store them in a temporary list list copiedChunks; for(displayModelChunksByPointMap_t::iterator i=chunksByYX.begin();i!=chunksByYX.end();++i) { - //We only care about chunks that are overlapped by the source rectangle - if(!IntersectRect(&tempRect,&srcRect,&(i->second->rect))) continue; + //We only care about chunks that are overlapped by the source rectangle + if(!IntersectRect(&tempRect,&srcRect,&(i->second->rect))) continue; //Copy the chunk displayModelChunk_t* chunk=new displayModelChunk_t(*(i->second)); if(srcInvert) { @@ -267,7 +267,7 @@ void displayModel_t::copyRectangle(const RECT& srcRect, BOOL removeFromSource, B if(chunk->rect.right>clippedDestRect.right) { chunk->truncate(clippedDestRect.right,FALSE); } - //if the chunk is now empty due to truncation then just delete it and move on to the next + //if the chunk is now empty due to truncation then just delete it and move on to the next if(chunk->text.length()==0) { delete chunk; continue; diff --git a/nvdaHelper/remote/displayModel.h b/nvdaHelper/remote/displayModel.h index d85a255a7e2..229c33781a4 100644 --- a/nvdaHelper/remote/displayModel.h +++ b/nvdaHelper/remote/displayModel.h @@ -90,7 +90,7 @@ struct displayModelChunk_t{ int direction; HWND hwnd; /** - * Truncates the chunk's text so that only the text that fits in the resulting rectangle is left. + * Truncates the chunk's text so that only the text that fits in the resulting rectangle is left. * @param truncatePointX the x position at which to truncate * @param truncateBefore if true then the chunk is truncated from the left all the way up to truncation point, if false then its truncated from the point to the end. */ @@ -144,7 +144,7 @@ class displayModel_t: public LockableAutoFreeObject { * @param rect the rectangle bounding the text. * @param text the string of unicode text in the chunk. * @param characterExtents an array of screen points denoting the end of each character relative to the start of the string - * @param clippingRect a optional pointer to a rectangle which if specified will be used to clip the text so that none falls outside this rectangle. + * @param clippingRect a optional pointer to a rectangle which if specified will be used to clip the text so that none falls outside this rectangle. */ void insertChunk(const RECT& rect, int baseline, const std::wstring& text, POINT* characterExtents, const displayModelFormatInfo_t& formatInfo, int direction, const RECT* clippingRect); @@ -161,7 +161,7 @@ class displayModel_t: public LockableAutoFreeObject { /** * Removes all chunks intersecting the given rectangle. Currently this must be called before inserting chunks as chunks should never overlap. * @param rect the rectangle to clear. - * @param clearForText if true then the part of any chunk covered by the rectangle will definitly be removed to make way for text. If False chunks will only be removed/mutated if the rectangle starts at or outside of, the chunk and overlaps it, or covers the chunk's baseline. + * @param clearForText if true then the part of any chunk covered by the rectangle will definitly be removed to make way for text. If False chunks will only be removed/mutated if the rectangle starts at or outside of, the chunk and overlaps it, or covers the chunk's baseline. */ void clearRectangle(const RECT& rect, BOOL clearForText=FALSE); @@ -170,7 +170,7 @@ class displayModel_t: public LockableAutoFreeObject { */ void clearAll(); - inline void transposAndScaleCoordinate(long srcOffset, long destOffset, float scale, long& val) { val=(long)(((val-srcOffset)*scale)+destOffset); } + inline void transposAndScaleCoordinate(long srcOffset, long destOffset, float scale, long& val) { val=(long)(((val-srcOffset)*scale)+destOffset); } /** @@ -178,14 +178,14 @@ class displayModel_t: public LockableAutoFreeObject { * @param srcRect the rectangle intersecting all the chunks in this model that will be copied. * @param removeFromSource if true then the content will be moved, rather than copied * @param opaqueCopy if true then the entire destination rectangle will be cleared before inserting any chunks, but if false then only space for each chunk will be cleared. - * @param destRect the destination rectangle where the chunks should be placed + * @param destRect the destination rectangle where the chunks should be placed * @param destClippingRect an optional rectangle which will be used to clip all content being copied in to the destination model - * @param destModel a pointer to the displayModel the chunks should be copied to (if NULL then this model is used) + * @param destModel a pointer to the displayModel the chunks should be copied to (if NULL then this model is used) */ void copyRectangle(const RECT& srcRect, BOOL removeFromSource, BOOL opaqueCopy, BOOL srcInvert, const RECT& destRect, const RECT* destClippingRect, displayModel_t* destModel); /** - * Generates xml representing whitespace between chunks + * Generates xml representing whitespace between chunks */ void generateWhitespaceXML(HWND hwnd, long baseline, std::wstring& text); diff --git a/nvdaHelper/remote/displayModelRemote.cpp b/nvdaHelper/remote/displayModelRemote.cpp index cf106349409..006f02361a9 100644 --- a/nvdaHelper/remote/displayModelRemote.cpp +++ b/nvdaHelper/remote/displayModelRemote.cpp @@ -14,7 +14,7 @@ This license can be found at: #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include #include diff --git a/nvdaHelper/remote/excel.cpp b/nvdaHelper/remote/excel.cpp index 99b431ab9bc..e07e8532785 100644 --- a/nvdaHelper/remote/excel.cpp +++ b/nvdaHelper/remote/excel.cpp @@ -34,7 +34,7 @@ long getCellTextWidth(HWND hwnd, IDispatch* pDispatchRange) { if(textLength==0) { return 0; } - // Fetch font size and weight information + // Fetch font size and weight information CComPtr pDispatchFont=nullptr; res=_com_dispatch_raw_propget(pDispatchRange,XLDISPID_RANGE_FONT,VT_DISPATCH,&pDispatchFont); if(FAILED(res)) { @@ -85,7 +85,7 @@ long getCellTextWidth(HWND hwnd, IDispatch* pDispatchRange) { ReleaseDC(hwnd,windowDC); HBITMAP hBmp=CreateCompatibleBitmap(tempDC,1,1); HGDIOBJ hOldBmp=SelectObject(tempDC,hBmp); - // Create a GDI font object with all the font attributes fetched from Excel and load it into the device context. + // Create a GDI font object with all the font attributes fetched from Excel and load it into the device context. long dpi = GetDeviceCaps(tempDC, LOGPIXELSX); long iFontWidth=0; long iEscapement=0; @@ -232,8 +232,8 @@ std::uint64_t getCellStates(HWND hwnd, IDispatch* pDispatchRange) { nvCellStates |= NvCellState::LINKED; } } - // Expose whether this cell's content flows outside the cell, - // and if so, whether it is cropped by the next cell, or overflowing into the next cell. + // Expose whether this cell's content flows outside the cell, + // and if so, whether it is cropped by the next cell, or overflowing into the next cell. BOOL shrinkToFit=false; res=_com_dispatch_raw_propget(pDispatchRange,XLDISPID_RANGE_SHRINKTOFIT,VT_BOOL,&shrinkToFit); if(FAILED(res)) { @@ -459,9 +459,9 @@ error_status_t nvdaInProcUtils_excel_getCellInfos(handle_t bindingHandle, const } HWND hwnd=static_cast(UlongToHandle(windowHandle)); long threadID=GetWindowThreadProcessId(hwnd,nullptr); - // Execute the following code in Excel's GUI thread. + // Execute the following code in Excel's GUI thread. execInThread(threadID,[&](){ - // Fetch the Excel object model and create a range object for the given range address. + // Fetch the Excel object model and create a range object for the given range address. CComPtr pDispatchWindow=nullptr; HRESULT res=AccessibleObjectFromWindow(hwnd,OBJID_NATIVEOM,IID_IDispatch,reinterpret_cast(&pDispatchWindow)); if(res!=S_OK||!pDispatchWindow) { diff --git a/nvdaHelper/remote/excel/Constants.h b/nvdaHelper/remote/excel/Constants.h index d281addb88d..d88e7f88b83 100644 --- a/nvdaHelper/remote/excel/Constants.h +++ b/nvdaHelper/remote/excel/Constants.h @@ -13,7 +13,7 @@ This license can be found at: #pragma once -// from XLDvType enumeration +// from XLDvType enumeration const long xlValidateList=3; // Excel IDispatch IDs diff --git a/nvdaHelper/remote/gdiHooks.cpp b/nvdaHelper/remote/gdiHooks.cpp index c2d8890b381..3c74b63c1f5 100644 --- a/nvdaHelper/remote/gdiHooks.cpp +++ b/nvdaHelper/remote/gdiHooks.cpp @@ -112,16 +112,16 @@ displayModelsMap_t displayModelsByWindow; /** * Fetches and or creates a new displayModel for the window of the given device context. - * If this function returns a displayModel, you must call release on it when you no longer need it. + * If this function returns a displayModel, you must call release on it when you no longer need it. * @param hdc a handle of the device context who's window the displayModel is for. - * @param noCreate If true a display model will not be created if it does not exist. - * @return a pointer to the new/existing displayModel, NULL if gdiHooks is not initialized or has been terminated. + * @param noCreate If true a display model will not be created if it does not exist. + * @return a pointer to the new/existing displayModel, NULL if gdiHooks is not initialized or has been terminated. */ inline displayModel_t* acquireDisplayModel(HDC hdc, BOOL noCreate=FALSE) { //If we are allowed, acquire use of the displayModel maps displayModel_t* model=NULL; //If the DC has a window, then either get an existing displayModel using the window, or create a new one and store it by its window. - //If the DC does not have a window, try and get the displayModel from our existing Memory DC displayModels. + //If the DC does not have a window, try and get the displayModel from our existing Memory DC displayModels. HWND hwnd=WindowFromDC(hdc); LOG_DEBUG(L"window from DC is "<second->decRef(); _glyphTranslatorsByFontChecksum.erase(i++); - } + } release(); } }; @@ -374,7 +374,7 @@ std::pair, SIZE> calcCharExtentsVec( std::vectorcharacterExtentsXVec(cbCount); int* characterExtentsX = characterExtentsXVec.data(); - + if(fromGlyphs) { LPWORD lpwszString = reinterpret_cast(const_cast(lpString)); GetTextExtentExPointI( @@ -486,8 +486,8 @@ void ExtTextOutHelper( calcCharExtentsVec(cbCount, tm, fromGlyphs, hdc, lpString, newText); POINT* characterExtents = characterExtentsVec.data(); *resultTextSize = textSize; // resultTextSize is an out-param and must be calculated before early exit. - - + + //Convert the character extents from logical to physical points, but keep them relative dcPointsToScreenPoints(hdc,characterExtents,cbCount,true); @@ -500,7 +500,7 @@ void ExtTextOutHelper( } return cached_transparentBackground.value(); }; - + if(tm.tmCharSet != SYMBOL_CHARSET && isBackgroundTransparent()) { //Find out if the text we're writing is just whitespace BOOL whitespace=TRUE; @@ -550,7 +550,7 @@ void ExtTextOutHelper( LOGFONT logFont; HGDIOBJ fontObj = GetCurrentObject(hdc, OBJ_FONT); GetObject(fontObj, sizeof(LOGFONT), &logFont); - + int fontSize = 0; if (logFont.lfHeight != 0) { const auto pixelsPerInchY = GetDeviceCaps(hdc, LOGPIXELSY); @@ -567,7 +567,7 @@ void ExtTextOutHelper( displayModelFormatColor_t(GetTextColor(hdc)), // color displayModelFormatColor_t(GetBkColor(hdc), isBackgroundTransparent()) // backgroundColor }; - + model->insertChunk(textRect,baselinePoint.y,newText,characterExtents,formatInfo,direction,(fuOptions&ETO_CLIPPED)?&clearRect:NULL); TextInsertionTracker::reportTextInsertion(); HWND hwnd=WindowFromDC(hdc); @@ -628,7 +628,7 @@ template int WINAPI hookClass_TextOut::fakeFunctio //Call the real function BOOL res; { - TextInsertionTracker tracker; + TextInsertionTracker tracker; res=realFunction(hdc,x,y,lpString,cbCount); if(tracker.hasTrackedTextInsertion()) return res; } @@ -689,7 +689,7 @@ template BOOL WINAPI hookClass_PolyTextOut::f if(textAlign&TA_UPDATECP) { curPos.x+=curTextSize.cx; curPos.y+=curTextSize.cy; - } + } } //Release model and return model->release(); @@ -815,7 +815,7 @@ template BOOL __stdcall hookClass_ExtTextOut::fakeF res=realFunction(hdc,x,y,fuOptions,lprc,lpString,cbCount,lpDx); if(tracker.hasTrackedTextInsertion()) return res; } - //If the real function did not work, or the arguments are not sane, or only glyphs were provided, then stop here. + //If the real function did not work, or the arguments are not sane, or only glyphs were provided, then stop here. if(res==0) return res; //try to get or create a displayModel for this device context displayModel_t* model=acquireDisplayModel(hdc); @@ -841,8 +841,8 @@ CreateCompatibleDC_funcType real_CreateCompatibleDC=NULL; HDC WINAPI fake_CreateCompatibleDC(HDC hdc) { //Call the real CreateCompatibleDC HDC newHdc=real_CreateCompatibleDC(hdc); - //If the creation was successful, and the DC that was used in the creation process is a window DC, - //we should create a displayModel for this DC so that text writes can be tracked in case its ever bit blitted to a window DC. + //If the creation was successful, and the DC that was used in the creation process is a window DC, + //we should create a displayModel for this DC so that text writes can be tracked in case its ever bit blitted to a window DC. //We also need to acquire access to the model maps while we do this if(!newHdc) return NULL; displayModel_t* model=new displayModel_t(); @@ -938,7 +938,7 @@ void StretchBlt_helper(HDC hdcDest, int nXDest, int nYDest, int nWidthDest, int } //BitBlt hook function -//Hooked so we can tell when content from one DC is being copied (bit blitted) to another (most likely from a memory DC to a window DC). +//Hooked so we can tell when content from one DC is being copied (bit blitted) to another (most likely from a memory DC to a window DC). typedef BOOL(WINAPI *BitBlt_funcType)(HDC,int,int,int,int,HDC,int,int,DWORD); BitBlt_funcType real_BitBlt=NULL; BOOL WINAPI fake_BitBlt(HDC hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, HDC hdcSrc, int nXSrc, int nYSrc, DWORD dwRop) { @@ -960,7 +960,7 @@ BOOL WINAPI fake_StretchBlt(HDC hdcDest, int nXDest, int nYDest, int nWidthDest, //#2989: KMPlayer uses stretchBlt with SRCCOPY to place a graphic over the top of its menu items replacing the real text. //Therefore at the moment don't allow stretchBlt SRCCOPY to clear previous text -- change it to SRCAND if blitting directly to a menu window HWND hwnd=NULL; - wchar_t className[7]; + wchar_t className[7]; if(hdcDest&&dwRop==SRCCOPY&&(hwnd=WindowFromDC(hdcDest))&&GetClassName(hwnd,className,ARRAYSIZE(className))>0&&wcscmp(className,L"#32768")==0) { dwRop=SRCAND; } @@ -1073,7 +1073,7 @@ HRESULT WINAPI fake_ScriptStringFree(SCRIPT_STRING_ANALYSIS* pssa) { //Get rid of unneeded info ScriptStringAnalyseArgsByAnalysis.erase(*pssa); LeaveCriticalSection(&criticalSection_ScriptStringAnalyseArgsByAnalysis); - return res; + return res; } //ScriptStringOut hook function @@ -1101,7 +1101,7 @@ HRESULT WINAPI fake_ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,int iX,int iY,UIN if(i==ScriptStringAnalyseArgsByAnalysis.end()) { LeaveCriticalSection(&criticalSection_ScriptStringAnalyseArgsByAnalysis); return res; - } + } //Try and get/create a displayModel for this DC, and if we can, then record the origianl text for these glyphs displayModel_t* model=acquireDisplayModel(i->second.hdc); if(!model) { @@ -1109,7 +1109,7 @@ HRESULT WINAPI fake_ScriptStringOut(SCRIPT_STRING_ANALYSIS ssa,int iX,int iY,UIN return res; } BOOL stripHotkeyIndicator=(i->second.dwFlags&SSA_HIDEHOTKEY||i->second.dwFlags&SSA_HOTKEY); - //The next two extTextOutHelper calls must keep their direction argument as 1. + //The next two extTextOutHelper calls must keep their direction argument as 1. //This is because ScriptStringAnalyze gave us a string in logical order and therefore we need to make sure that NVDA does not try to detect and possibly reverse. if(i->second.iCharset==-1) { //Unicode ExtTextOutHelper(model,i->second.hdc,iX,iY,prc,uOptions,GetTextAlign(i->second.hdc),stripHotkeyIndicator,(wchar_t*)(i->second.pString),CP_THREAD_ACP,NULL,i->second.cString,NULL,1); @@ -1161,7 +1161,7 @@ BOOL WINAPI fake_ScrollWindow(HWND hwnd, int XAmount, int YAmount, const RECT* l model->release(); return res; } - + //ScrollWindowEx hook function typedef BOOL(WINAPI *ScrollWindowEx_funcType)(HWND,int,int,const RECT*, const RECT*, HRGN, LPRECT,UINT); ScrollWindowEx_funcType real_ScrollWindowEx=NULL; @@ -1256,14 +1256,14 @@ void gdiHooks_inProcess_terminate() { while(i!=displayModelsByWindow.end()) { i->second->requestDelete(); displayModelsByWindow.erase(i++); - } + } displayModelsByWindow.release(); displayModelsByMemoryDC.acquire(); displayModelsMap_t::iterator j=displayModelsByMemoryDC.begin(); while(j!=displayModelsByMemoryDC.end()) { j->second->requestDelete(); displayModelsByMemoryDC.erase(j++); - } + } displayModelsByMemoryDC.release(); EnterCriticalSection(&criticalSection_ScriptStringAnalyseArgsByAnalysis); allow_ScriptStringAnalyseArgsByAnalysis=FALSE; diff --git a/nvdaHelper/remote/gdiHooks.h b/nvdaHelper/remote/gdiHooks.h index 32ae73f969e..4a29b3b2340 100644 --- a/nvdaHelper/remote/gdiHooks.h +++ b/nvdaHelper/remote/gdiHooks.h @@ -26,7 +26,7 @@ template class displayModelsMap_t: public std::map windowsForTextChangeNotifications; +extern std::map windowsForTextChangeNotifications; extern displayModelsMap_t displayModelsByWindow; void gdiHooks_inProcess_initialize(); @@ -94,4 +94,4 @@ typedef struct { #pragma pack(pop) -#endif \ No newline at end of file +#endif diff --git a/nvdaHelper/remote/ia2LiveRegions.cpp b/nvdaHelper/remote/ia2LiveRegions.cpp index 4926dc15b26..ef52a610ab1 100644 --- a/nvdaHelper/remote/ia2LiveRegions.cpp +++ b/nvdaHelper/remote/ia2LiveRegions.cpp @@ -106,7 +106,7 @@ bool isInBackgroundTab(IAccessible* acc, HWND hwnd) { return accDocId != fgDocId; } -void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time) { +void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time) { HWND fgHwnd=GetForegroundWindow(); //Ignore events for windows that are invisible or are not in the foreground if(!IsWindowVisible(hwnd)||(hwnd!=fgHwnd&&!IsChild(fgHwnd,hwnd))) return; @@ -135,7 +135,7 @@ void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, l } //Retreave an IAccessible2 via IServiceProvider if it exists. CComQIPtr pserv(pacc); - if(!pserv) return; + if(!pserv) return; CComPtr pacc2; pserv->QueryService(IID_IAccessible, IID_IAccessible2, (void**)(&pacc2)); if(!pacc2) return; @@ -182,7 +182,7 @@ void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, l } else { //we support additions if its specified, we support text if its specified allowText=(i->second.find(L"text",0)!=wstring::npos); allowAdditions=(i->second.find(L"additions",0)!=wstring::npos); - } + } // We only support additions or text if(!allowAdditions&&!allowText) { return; @@ -191,7 +191,7 @@ void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, l if(eventID==EVENT_OBJECT_SHOW&&!allowAdditions) { return; } - // If this is a show event and this is not the root of the region and there is a text parent, + // If this is a show event and this is not the root of the region and there is a text parent, // We can ignore this event as there will be text events which can handle this better if(eventID==EVENT_OBJECT_SHOW) { bool ignoreShowEvent=false; @@ -204,7 +204,7 @@ void CALLBACK winEventProcHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, l ignoreShowEvent=true; } if(!ignoreShowEvent) { - // Check for useful container-live on parent, as if missing or off, then child must be the root + // Check for useful container-live on parent, as if missing or off, then child must be the root // Firstly, we assume we are the root of the region and therefore should ignore the event ignoreShowEvent=true; CComQIPtr pacc2Parent(pdispParent); diff --git a/nvdaHelper/remote/ime.cpp b/nvdaHelper/remote/ime.cpp index 2d4f6c68966..ceea426312c 100644 --- a/nvdaHelper/remote/ime.cpp +++ b/nvdaHelper/remote/ime.cpp @@ -58,27 +58,27 @@ This license can be found at: // Definition from Win98DDK version of IMM.H typedef struct tagINPUTCONTEXT2 { - HWND hWnd; - BOOL fOpen; - POINT ptStatusWndPos; - POINT ptSoftKbdPos; - DWORD fdwConversion; - DWORD fdwSentence; - union { - LOGFONTA A; - LOGFONTW W; - } lfFont; - COMPOSITIONFORM cfCompForm; - CANDIDATEFORM cfCandForm[4]; - HIMCC hCompStr; - HIMCC hCandInfo; - HIMCC hGuideLine; - HIMCC hPrivate; - DWORD dwNumMsgBuf; - HIMCC hMsgBuf; - DWORD fdwInit; - DWORD dwReserve[3]; -} INPUTCONTEXT2, *PINPUTCONTEXT2, NEAR *NPINPUTCONTEXT2, FAR *LPINPUTCONTEXT2; + HWND hWnd; + BOOL fOpen; + POINT ptStatusWndPos; + POINT ptSoftKbdPos; + DWORD fdwConversion; + DWORD fdwSentence; + union { + LOGFONTA A; + LOGFONTW W; + } lfFont; + COMPOSITIONFORM cfCompForm; + CANDIDATEFORM cfCandForm[4]; + HIMCC hCompStr; + HIMCC hCandInfo; + HIMCC hGuideLine; + HIMCC hPrivate; + DWORD dwNumMsgBuf; + HIMCC hMsgBuf; + DWORD fdwInit; + DWORD dwReserve[3]; +} INPUTCONTEXT2, *PINPUTCONTEXT2, NEAR *NPINPUTCONTEXT2, FAR *LPINPUTCONTEXT2; HWND curIMEWindow=NULL; static HWND candidateIMEWindow=0; diff --git a/nvdaHelper/remote/inProcess.cpp b/nvdaHelper/remote/inProcess.cpp index 607bfcb8126..ee4ec4bb76d 100755 --- a/nvdaHelper/remote/inProcess.cpp +++ b/nvdaHelper/remote/inProcess.cpp @@ -11,12 +11,12 @@ Copyright 2006-2010 NVDA contributers. This license can be found at: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ - + #include #include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include "winword.h" #include "inputLangChange.h" diff --git a/nvdaHelper/remote/injection.cpp b/nvdaHelper/remote/injection.cpp index e7e2314f77e..021d1281c35 100644 --- a/nvdaHelper/remote/injection.cpp +++ b/nvdaHelper/remote/injection.cpp @@ -16,7 +16,7 @@ This license can be found at: #include #include #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include #include @@ -101,7 +101,7 @@ HHOOK WINAPI fake_SetWindowsHookExA(int IdHook, HOOKPROC lpfn, HINSTANCE hMod, D inprocThreadsLock.acquire(); map::iterator i=hooksByThread->find(dwThreadId); if(i!=hooksByThread->end()) { - //Unhook our previous hook for this thread and rehook it again, placing our hook before the non-NVDA hook just registered + //Unhook our previous hook for this thread and rehook it again, placing our hook before the non-NVDA hook just registered if(UnhookWindowsHookEx(i->second)) { i->second=SetWindowsHookEx(IdHook,ourHookProc,NULL,dwThreadId); } else { @@ -137,7 +137,7 @@ DWORD WINAPI inprocMgrThreadFunc(LPVOID data) { wostringstream mutexNameStream; mutexNameStream< #include #include "nvdaHelperRemote.h" diff --git a/nvdaHelper/remote/inputLangChange.h b/nvdaHelper/remote/inputLangChange.h index 57f6cef2745..5f05be24cab 100755 --- a/nvdaHelper/remote/inputLangChange.h +++ b/nvdaHelper/remote/inputLangChange.h @@ -24,4 +24,4 @@ This license can be found at: void inputLangChange_inProcess_initialize(); void inputLangChange_inProcess_terminate(); -#endif \ No newline at end of file +#endif diff --git a/nvdaHelper/remote/log.cpp b/nvdaHelper/remote/log.cpp index ff6db53ec76..c02e476e683 100644 --- a/nvdaHelper/remote/log.cpp +++ b/nvdaHelper/remote/log.cpp @@ -23,7 +23,7 @@ This license can be found at: std::deque> logQueue; std::mutex logQueueLock; -// Forward declare an APC function for flushing the log queue. +// Forward declare an APC function for flushing the log queue. void __stdcall log_flushQueue_apcFunc(ULONG_PTR data); // Fetch all available messages from the queue @@ -54,7 +54,7 @@ void __stdcall log_flushQueue_apcFunc(ULONG_PTR data) { } void logMessage(int level, const wchar_t* msg) { - // Always log to any connected debugger + // Always log to any connected debugger OutputDebugString(msg); if( !inprocMgrThreadHandle diff --git a/nvdaHelper/remote/outlook.cpp b/nvdaHelper/remote/outlook.cpp index f738badfa3f..02dcb81bc25 100644 --- a/nvdaHelper/remote/outlook.cpp +++ b/nvdaHelper/remote/outlook.cpp @@ -60,7 +60,7 @@ error_status_t nvdaInProcUtils_outlook_getMAPIProp(handle_t bindingHandle, const } auto HrGetOneProp=(funcType_HrGetOneProp)GetProcAddress(mapi32lib,"HrGetOneProp"); if(!HrGetOneProp) { - // Some versions of mapi32.dll name the HrGetOneProp symbol with an arguments size suffix + // Some versions of mapi32.dll name the HrGetOneProp symbol with an arguments size suffix HrGetOneProp=(funcType_HrGetOneProp)GetProcAddress(mapi32lib,"HrGetOneProp@12"); } if(!HrGetOneProp) { @@ -74,14 +74,14 @@ error_status_t nvdaInProcUtils_outlook_getMAPIProp(handle_t bindingHandle, const } // NVDA gave us an IUnknown pointer representing the MAPI object from Outlook. // As the MAPIProp interface is not marshallable, we need to access it from its original STA thread as a real (non-proxied) raw pointer. - // Therefore register the IUnknown in the COM global interface table so we can unmarshal it in the main GUI thread. + // Therefore register the IUnknown in the COM global interface table so we can unmarshal it in the main GUI thread. nvCOMUtils::InterfaceMarshaller im; HRESULT res=im.marshal(mapiObject); if(res!=S_OK) { LOG_ERROR(L"Failed to marshal MAPI object from rpc thread"); return E_UNEXPECTED; } - // Execute the following code in Outlook's GUI thread. + // Execute the following code in Outlook's GUI thread. execInThread(threadID,[=,&res,&im](){ // Unmarshal the IUnknown pointer from the COM global interface table. IUnknownPtr mapiObject=im.unmarshal(); diff --git a/nvdaHelper/remote/rpcSrv.cpp b/nvdaHelper/remote/rpcSrv.cpp index f98e1b76455..e018b68a25d 100755 --- a/nvdaHelper/remote/rpcSrv.cpp +++ b/nvdaHelper/remote/rpcSrv.cpp @@ -54,7 +54,7 @@ RPC_STATUS rpcSrv_initialize() { status=RpcServerUseProtseq((RPC_WSTR)L"ncalrpc",RPC_C_PROTSEQ_MAX_REQS_DEFAULT,NULL); //We can ignore the error where the endpoint is already set if(status!=RPC_S_OK&&status!=RPC_S_DUPLICATE_ENDPOINT) { - LOG_ERROR(L"Unable to use RPC endPoint. RPC error "< #include diff --git a/nvdaHelper/remote/tsf.cpp b/nvdaHelper/remote/tsf.cpp index cb9f9040461..53756763811 100644 --- a/nvdaHelper/remote/tsf.cpp +++ b/nvdaHelper/remote/tsf.cpp @@ -565,7 +565,7 @@ STDMETHODIMP TsfSink::OnActivated(DWORD dwProfileType, LANGID langId, REFCLSID r return S_OK; } -static void CALLBACK TSF_winEventHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time) { +static void CALLBACK TSF_winEventHook(HWINEVENTHOOK hookID, DWORD eventID, HWND hwnd, long objectID, long childID, DWORD threadID, DWORD time) { switch (eventID) { case EVENT_SYSTEM_FOREGROUND: @@ -638,6 +638,6 @@ void TSF_thread_detached() { bool isTSFThread() { TsfSink* tsf=fetchCurrentTsfSink(); - if(!tsf) return false; + if(!tsf) return false; return tsf->hasActiveProfile; } diff --git a/nvdaHelper/remote/typedCharacter.cpp b/nvdaHelper/remote/typedCharacter.cpp index c214aee8090..5314c84ad1b 100755 --- a/nvdaHelper/remote/typedCharacter.cpp +++ b/nvdaHelper/remote/typedCharacter.cpp @@ -12,7 +12,7 @@ This license can be found at: http://www.gnu.org/licenses/old-licenses/gpl-2.0.html */ -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include #include "nvdaHelperRemote.h" @@ -31,7 +31,7 @@ LRESULT CALLBACK typedCharacter_getMessageHook(int code, WPARAM wParam, LPARAM l if(pmsg->message==WM_KEYDOWN) { typedCharacter_window=pmsg->hwnd; lastCharacter=0; - } else if((typedCharacter_window!=0)&&(pmsg->message==WM_CHAR)&&(pmsg->hwnd==typedCharacter_window)&&(pmsg->wParam!=lastCharacter)) { + } else if((typedCharacter_window!=0)&&(pmsg->message==WM_CHAR)&&(pmsg->hwnd==typedCharacter_window)&&(pmsg->wParam!=lastCharacter)) { // Instruct NVDA's inproc manager thread to report the typed character to NVDA via rpc. // If we were to call the rpc function directly, it might cause a deadlock diff --git a/nvdaHelper/remote/typedCharacter.h b/nvdaHelper/remote/typedCharacter.h index b634cabcb62..c5822f57c1f 100755 --- a/nvdaHelper/remote/typedCharacter.h +++ b/nvdaHelper/remote/typedCharacter.h @@ -22,4 +22,4 @@ extern HWND typedCharacter_window; void typedCharacter_inProcess_initialize(); void typedCharacter_inProcess_terminate(); -#endif \ No newline at end of file +#endif diff --git a/nvdaHelper/remote/vbufRemote.cpp b/nvdaHelper/remote/vbufRemote.cpp index 9785ff2ecf0..68b824a2ca6 100755 --- a/nvdaHelper/remote/vbufRemote.cpp +++ b/nvdaHelper/remote/vbufRemote.cpp @@ -100,7 +100,7 @@ int VBufRemote_locateControlFieldNodeAtOffset(VBufRemote_bufferHandle_t buffer, return (*foundNode)!=0; } -int VBufRemote_getControlFieldNodeWithIdentifier(VBufRemote_bufferHandle_t buffer, int docHandle, int ID, VBufRemote_nodeHandle_t* foundNode) { +int VBufRemote_getControlFieldNodeWithIdentifier(VBufRemote_bufferHandle_t buffer, int docHandle, int ID, VBufRemote_nodeHandle_t* foundNode) { VBufBackend_t* backend=(VBufBackend_t*)buffer; backend->lock.acquire(); *foundNode=(VBufRemote_nodeHandle_t)(backend->getControlFieldNodeWithIdentifier(docHandle,ID)); @@ -108,7 +108,7 @@ int VBufRemote_getControlFieldNodeWithIdentifier(VBufRemote_bufferHandle_t buffe return (*foundNode)!=0; } -int VBufRemote_getIdentifierFromControlFieldNode(VBufRemote_bufferHandle_t buffer, VBufRemote_nodeHandle_t node, int* docHandle, int* ID) { +int VBufRemote_getIdentifierFromControlFieldNode(VBufRemote_bufferHandle_t buffer, VBufRemote_nodeHandle_t node, int* docHandle, int* ID) { VBufBackend_t* backend=(VBufBackend_t*)buffer; backend->lock.acquire(); int res=backend->getIdentifierFromControlFieldNode((VBufStorage_controlFieldNode_t*)node,docHandle,ID); @@ -116,7 +116,7 @@ int VBufRemote_getIdentifierFromControlFieldNode(VBufRemote_bufferHandle_t buffe return res; } -int VBufRemote_findNodeByAttributes(VBufRemote_bufferHandle_t buffer, int offset, int direction, const wchar_t* attribs, const wchar_t* regexp, int *startOffset, int *endOffset, VBufRemote_nodeHandle_t* foundNode) { +int VBufRemote_findNodeByAttributes(VBufRemote_bufferHandle_t buffer, int offset, int direction, const wchar_t* attribs, const wchar_t* regexp, int *startOffset, int *endOffset, VBufRemote_nodeHandle_t* foundNode) { VBufBackend_t* backend=(VBufBackend_t*)buffer; backend->lock.acquire(); *foundNode=(VBufRemote_nodeHandle_t)(backend->findNodeByAttributes(offset,(VBufStorage_findDirection_t)direction,attribs,regexp,startOffset,endOffset)); diff --git a/nvdaHelper/remote/winword.cpp b/nvdaHelper/remote/winword.cpp index 4234b776f71..e0acb52346d 100644 --- a/nvdaHelper/remote/winword.cpp +++ b/nvdaHelper/remote/winword.cpp @@ -60,7 +60,7 @@ constexpr int formatConfig_initialFormatFlags =(formatConfig_reportPage|formatCo constexpr wchar_t PAGE_BREAK_VALUE = L'\x0c'; constexpr wchar_t COLUMN_BREAK_VALUE = L'\x0e'; -// A class that disables MS Word screen updating while it is alive. +// A class that disables MS Word screen updating while it is alive. class ScreenUpdatingDisabler { private: IDispatchPtr pDispatchApplication {nullptr}; @@ -666,7 +666,7 @@ void generateXMLAttribsForFormatting(IDispatch* pDispatchRange, int startOffset, } if(_com_dispatch_raw_propget(pDispatchFont,wdDISPID_FONT_HIDDEN,VT_I4,&iVal)==S_OK&&iVal) { formatAttribsStream< #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include diff --git a/nvdaHelper/vbufBackends/adobeAcrobat/adobeAcrobat.cpp b/nvdaHelper/vbufBackends/adobeAcrobat/adobeAcrobat.cpp index 3de4063a29c..5984ebb3581 100644 --- a/nvdaHelper/vbufBackends/adobeAcrobat/adobeAcrobat.cpp +++ b/nvdaHelper/vbufBackends/adobeAcrobat/adobeAcrobat.cpp @@ -52,7 +52,7 @@ long getAccID(IServiceProvider* servprov) { if((res=servprov->QueryService(SID_AccID,IID_IAccID,(void**)(&paccID)))!=S_OK) { LOG_DEBUG(L"IServiceProvider::QueryService returned "<get_accID(&ID)) != S_OK) { @@ -84,7 +84,7 @@ IPDDomNode* getPDDomNode(VARIANT& varChild, IServiceProvider* servprov) { if((res=servprov->QueryService(SID_GetPDDomNode,IID_IGetPDDomNode,(void**)(&pget)))!=S_OK) { LOG_DEBUG(L"IServiceProvider::QueryService returned "<QueryInterface(IID_IPDDomNodeExt, (void**)&domNodeExt) != S_OK) + if (domNode->QueryInterface(IID_IPDDomNodeExt, (void**)&domNodeExt) != S_OK) return NULL; long firstPage, lastPage; // The page number is only useful if the first and last pages are the same. @@ -326,7 +326,7 @@ wstring* AdobeAcrobatVBufBackend_t::getPageNum(IPDDomNode* domNode) { SysFreeString(label); return ret; } - + // If the label couldn't be retrieved, use the page number. wostringstream s; // GetPageNum returns 0-based numbers, but we want 1-based. @@ -356,7 +356,7 @@ AdobeAcrobatVBufStorage_controlFieldNode_t* AdobeAcrobatVBufBackend_t::fillVBuf( if((res=pacc->QueryInterface(IID_IServiceProvider,(void**)(&servprov)))!=S_OK) { LOG_DEBUG(L"IAccessible::QueryInterface returned "<(buffer->addControlFieldNode(parentNode, previousNode, + parentNode = static_cast(buffer->addControlFieldNode(parentNode, previousNode, new AdobeAcrobatVBufStorage_controlFieldNode_t(docHandle, ID, true))); nhAssert(parentNode); //new node must have been created previousNode=NULL; @@ -880,4 +880,3 @@ VBufBackend_t* AdobeAcrobatVBufBackend_t_createInstance(int docHandle, int ID) { LOG_DEBUG(L"Created new backend at "<QueryInterface(IID_IServiceProvider,(void**)&pserv)!=S_OK) { pacc->Release(); return NULL; - } + } pacc->Release(); pserv->QueryService(IID_IAccessible,IID_IAccessible2,(void**)&pacc2); pserv->Release(); @@ -642,7 +642,7 @@ VBufStorage_fieldNode_t* GeckoVBufBackend_t::fillVBuf( LOG_DEBUG(L"pacc->get_states failed"); IA2States=0; } - // Remove state_editable from tables as Gecko exposes it for ARIA grids which is not in the ARIA spec. + // Remove state_editable from tables as Gecko exposes it for ARIA grids which is not in the ARIA spec. if(IA2States&IA2_STATE_EDITABLE&&role==ROLE_SYSTEM_TABLE) { IA2States-=IA2_STATE_EDITABLE; } @@ -767,14 +767,14 @@ VBufStorage_fieldNode_t* GeckoVBufBackend_t::fillVBuf( return id; }; const bool nameIsContent = isEmbeddedApp - || role == ROLE_SYSTEM_LINK - || role == ROLE_SYSTEM_PUSHBUTTON - || role == IA2_ROLE_TOGGLE_BUTTON - || role == ROLE_SYSTEM_MENUITEM - || (role == ROLE_SYSTEM_GRAPHIC && !isImgMap) - || (role == ROLE_SYSTEM_TEXT && !isEditable) - || role == IA2_ROLE_HEADING - || role == ROLE_SYSTEM_PAGETAB + || role == ROLE_SYSTEM_LINK + || role == ROLE_SYSTEM_PUSHBUTTON + || role == IA2_ROLE_TOGGLE_BUTTON + || role == ROLE_SYSTEM_MENUITEM + || (role == ROLE_SYSTEM_GRAPHIC && !isImgMap) + || (role == ROLE_SYSTEM_TEXT && !isEditable) + || role == IA2_ROLE_HEADING + || role == ROLE_SYSTEM_PAGETAB || role == ROLE_SYSTEM_BUTTONMENU || ((role == ROLE_SYSTEM_CHECKBUTTON || role == ROLE_SYSTEM_RADIOBUTTON) && !isLabelVisibleCached()); // Whether this node has a visible label somewhere else in the tree @@ -882,10 +882,10 @@ VBufStorage_fieldNode_t* GeckoVBufBackend_t::fillVBuf( if(!paccTableCell) { // just rows and row groups // setting requiresParentUpdate ensures that if this node is specifically invalidated, // its parent will also be invalidated. - // For example, if this is a table row group, its rerendering may change the number of rows inside. + // For example, if this is a table row group, its rerendering may change the number of rows inside. // this in turn would affect the coordinates of all table cells in table rows after this row group. // Thus, ensuring we rerender this node's parent, gives a chance to rerender other table rows. - // Note that we however do not want to set this on table rows as if this row alone is invalidated, none of the other row coordinates would be affected. + // Note that we however do not want to set this on table rows as if this row alone is invalidated, none of the other row coordinates would be affected. if(role!=ROLE_SYSTEM_ROW) { LOG_DEBUG(L"Setting node's requiresParentUpdate to true"); parentNode->requiresParentUpdate=true; @@ -951,7 +951,7 @@ VBufStorage_fieldNode_t* GeckoVBufBackend_t::fillVBuf( paccTable2 = curNodePaccTable2; } - + { // Add the table summary if one is present and the table is visible. VBufStorage_fieldNode_t* summaryTempNode = nullptr; if (isVisible && description.has_value() && !description.value().empty()) { @@ -1008,7 +1008,7 @@ VBufStorage_fieldNode_t* GeckoVBufBackend_t::fillVBuf( } if(nameIsContent) { - // We may render an accessible name for this node if it has been explicitly set or it has no useful content. + // We may render an accessible name for this node if it has been explicitly set or it has no useful content. parentNode->alwaysRerenderDescendants=true; } diff --git a/nvdaHelper/vbufBackends/lotusNotesRichText/lotusNotesRichText.cpp b/nvdaHelper/vbufBackends/lotusNotesRichText/lotusNotesRichText.cpp index f1ce0481e05..bb18c5fc05f 100644 --- a/nvdaHelper/vbufBackends/lotusNotesRichText/lotusNotesRichText.cpp +++ b/nvdaHelper/vbufBackends/lotusNotesRichText/lotusNotesRichText.cpp @@ -140,7 +140,7 @@ int id=accChildID; content=value; } else if(role!=ROLE_SYSTEM_TEXT&&!name.empty()) { content=name; - } else { + } else { content = L" "; } if (!content.empty()) { diff --git a/nvdaHelper/vbufBackends/mshtml/mshtml.cpp b/nvdaHelper/vbufBackends/mshtml/mshtml.cpp index 8a91669bb0f..358c4293d52 100755 --- a/nvdaHelper/vbufBackends/mshtml/mshtml.cpp +++ b/nvdaHelper/vbufBackends/mshtml/mshtml.cpp @@ -54,7 +54,7 @@ VBufStorage_controlFieldNode_t* MshtmlVBufBackend_t::getDeepestControlFieldNodeF pHTMLUniqueName->get_uniqueNumber((long*)&ID); pHTMLUniqueName->Release(); if(ID!=0) { - VBufStorage_controlFieldNode_t* node=this->getControlFieldNodeWithIdentifier(this->rootDocHandle,ID); + VBufStorage_controlFieldNode_t* node=this->getControlFieldNodeWithIdentifier(this->rootDocHandle,ID); if(node) { if(elementNeedsRelease) pHTMLElement->Release(); return node; @@ -173,7 +173,7 @@ HRESULT hRes=0; return hRes; } -IHTMLElement* LocateHTMLElementInDocument(IHTMLDocument3* pHTMLDocument3, const wstring& ID) { +IHTMLElement* LocateHTMLElementInDocument(IHTMLDocument3* pHTMLDocument3, const wstring& ID) { HRESULT hRes; IHTMLElement* pHTMLElement=NULL; //First try getting the element directly from this document @@ -326,7 +326,7 @@ inline wstring getTextFromHTMLDOMNode(IHTMLDOMNode* pHTMLDOMNode, bool allowPref } else if(lastNotWhitespace||!strippingLeft) { s+=L' '; lastNotWhitespace=FALSE; - } + } } } SysFreeString(data); @@ -407,8 +407,8 @@ inline void getCurrentStyleInfoFromHTMLDOMNode(IHTMLDOMNode* pHTMLDOMNode, bool& if (pHTMLCurrentStyle) pHTMLCurrentStyle->Release(); } -// #8976: the string in the following macro must be passed to the COM method as a BSTR -// otherwise the COM marshaller will try and read the BSTR length and hit either inaccessible memory or get back junk. +// #8976: the string in the following macro must be passed to the COM method as a BSTR +// otherwise the COM marshaller will try and read the BSTR length and hit either inaccessible memory or get back junk. // This is seen in optimized builds of NVDA when accessing some CHM files in hh.exe. #define macro_addHTMLAttributeToMap(attribName,allowEmpty,attribsObj,attribsMap,tempVar,tempAttrObj) {\ attribsObj->getNamedItem(CComBSTR(attribName),&tempAttrObj);\ @@ -587,7 +587,7 @@ inline void fillTextFormattingForNode(IHTMLDOMNode* pHTMLDOMNode, VBufStorage_fi inline void fillTextFormattingForTextNode(VBufStorage_controlFieldNode_t* parentNode, VBufStorage_textFieldNode_t* textNode) //text nodes don't support IHTMLElement2 interface, so using style information from parent node { - IHTMLElement2* pHTMLElement2=NULL; + IHTMLElement2* pHTMLElement2=NULL; static_cast(parentNode)->pHTMLDOMNode->QueryInterface(IID_IHTMLElement2,(void**)&pHTMLElement2); if(pHTMLElement2) { fillTextFormatting_helper(pHTMLElement2,textNode); @@ -775,7 +775,7 @@ VBufStorage_fieldNode_t* MshtmlVBufBackend_t::fillVBuf(VBufStorage_buffer_t* buf wostringstream tempStringStream; //Handle text nodes - if(!shouldSkipText) { + if(!shouldSkipText) { wstring s=getTextFromHTMLDOMNode(pHTMLDOMNode,allowPreformattedText,(parentNode&&parentNode->isBlock&&!previousNode)); if(!s.empty()) { LOG_DEBUG(L"Got text from node"); @@ -812,7 +812,7 @@ VBufStorage_fieldNode_t* MshtmlVBufBackend_t::fillVBuf(VBufStorage_buffer_t* buf wstring nodeName=tempBSTR; SysFreeString(tempBSTR); tempBSTR=NULL; - for(wstring::iterator i=nodeName.begin();i!=nodeName.end();++i) + for(wstring::iterator i=nodeName.begin();i!=nodeName.end();++i) *i=towupper(*i); LOG_DEBUG(L"Got IHTMLDOMNode::nodeName of "<getParent()); VBufStorage_controlFieldNode_t* node=new MshtmlVBufStorage_controlFieldNode_t(docHandle,ID,isBlock,this,isDocRoot,pHTMLDOMNode,language); ((MshtmlVBufStorage_controlFieldNode_t*)node)->formatState=formatState; @@ -1001,7 +1001,7 @@ VBufStorage_fieldNode_t* MshtmlVBufBackend_t::fillVBuf(VBufStorage_buffer_t* buf } else if(!hidden&&ariaRole.compare(L"presentation")==0) { hidden=true; } - } + } //IE doesn't seem to support aria-label yet so we want to override IAName with it tempIter=attribsMap.find(L"HTMLAttrib::aria-label"); if(tempIter!=attribsMap.end()) { @@ -1059,7 +1059,7 @@ VBufStorage_fieldNode_t* MshtmlVBufBackend_t::fillVBuf(VBufStorage_buffer_t* buf if(!hidden) { //Collect and update table information - tableInfo=fillVBuf_helper_collectAndUpdateTableInfo(parentNode, nodeName, docHandle,ID, tableInfo, attribsMap); + tableInfo=fillVBuf_helper_collectAndUpdateTableInfo(parentNode, nodeName, docHandle,ID, tableInfo, attribsMap); } // Whether the name is the content of this node. @@ -1126,7 +1126,7 @@ VBufStorage_fieldNode_t* MshtmlVBufBackend_t::fillVBuf(VBufStorage_buffer_t* buf else if (isInteractive && !IAValue.empty()) { // The graphic is unlabelled, but we should try to derive a name for it. contentString=getNameForURL(IAValue); - } + } } else if(nodeName.compare(L"INPUT")==0) { tempIter=attribsMap.find(L"HTMLAttrib::type"); if(tempIter!=attribsMap.end()&&tempIter->second.compare(L"file")==0) { diff --git a/nvdaHelper/vbufBackends/mshtml/mshtml.h b/nvdaHelper/vbufBackends/mshtml/mshtml.h index 01b3f35cd45..d5904940171 100755 --- a/nvdaHelper/vbufBackends/mshtml/mshtml.h +++ b/nvdaHelper/vbufBackends/mshtml/mshtml.h @@ -44,7 +44,7 @@ typedef struct { void incBackendLibRefCount(); void decBackendLibRefCount(); -// gets the window message registered by MSHTML which is used to fetch the MSHTML object model from its window. +// gets the window message registered by MSHTML which is used to fetch the MSHTML object model from its window. UINT getHTMLWindowMessage(); class MshtmlVBufBackend_t: public VBufBackend_t { diff --git a/nvdaHelper/vbufBackends/mshtml/node.cpp b/nvdaHelper/vbufBackends/mshtml/node.cpp index d1316f55303..b5806c53423 100755 --- a/nvdaHelper/vbufBackends/mshtml/node.cpp +++ b/nvdaHelper/vbufBackends/mshtml/node.cpp @@ -329,7 +329,7 @@ MshtmlVBufStorage_controlFieldNode_t::MshtmlVBufStorage_controlFieldNode_t( pHTMLDOMNode2->get_ownerDocument(&pDispDoc); pHTMLDOMNode2->Release(); if(pDispDoc) { - pDispDoc->QueryInterface(IID_IMarkupContainer2,(void**)&(this->pMarkupContainer2)); + pDispDoc->QueryInterface(IID_IMarkupContainer2,(void**)&(this->pMarkupContainer2)); pDispDoc->Release(); if(this->pMarkupContainer2) { this->pHTMLChangeSink=new CHTMLChangeSink(this); @@ -354,7 +354,7 @@ MshtmlVBufStorage_controlFieldNode_t::MshtmlVBufStorage_controlFieldNode_t( SysFreeString(nodeName); } } - + MshtmlVBufStorage_controlFieldNode_t::~MshtmlVBufStorage_controlFieldNode_t() { if(this->propChangeSink) { if(!(static_cast(this->propChangeSink)->disconnect())) { diff --git a/nvdaHelper/vbufBackends/mshtml/node.h b/nvdaHelper/vbufBackends/mshtml/node.h index 0ec49fe976d..ca780789d96 100755 --- a/nvdaHelper/vbufBackends/mshtml/node.h +++ b/nvdaHelper/vbufBackends/mshtml/node.h @@ -28,7 +28,7 @@ class MshtmlVBufStorage_controlFieldNode_t : public VBufStorage_controlFieldNode void preProcessLiveRegion(const MshtmlVBufStorage_controlFieldNode_t* parent, const std::map& attribsMap); void postProcessLiveRegion(VBufStorage_controlFieldNode_t* oldNode, std::set& atomicNodes); virtual void generateAttributesForMarkupOpeningTag(std::wstring& text, int startOffset, int endOffset); - + MshtmlVBufStorage_controlFieldNode_t( int docHandle, int ID, diff --git a/nvdaHelper/vbufBackends/webKit/webKit.cpp b/nvdaHelper/vbufBackends/webKit/webKit.cpp index f68a5da01ae..1abcbd891f9 100644 --- a/nvdaHelper/vbufBackends/webKit/webKit.cpp +++ b/nvdaHelper/vbufBackends/webKit/webKit.cpp @@ -148,7 +148,7 @@ VBufStorage_fieldNode_t* WebKitVBufBackend_t::fillVBuf(int docHandle, IAccessibl if ((role != ROLE_SYSTEM_TEXT || !(states & STATE_SYSTEM_FOCUSABLE)) && role != ROLE_SYSTEM_COMBOBOX && pacc->get_accName(varChild, &tempBstr) == S_OK && tempBstr) { content = tempBstr; - } + } tempBstr.Empty(); if (content.empty()&&pacc->get_accValue(varChild, &tempBstr) == S_OK && tempBstr) { content = tempBstr; diff --git a/nvdaHelper/vbufBase/backend.cpp b/nvdaHelper/vbufBase/backend.cpp index b7c51824286..d02e8ec79be 100644 --- a/nvdaHelper/vbufBase/backend.cpp +++ b/nvdaHelper/vbufBase/backend.cpp @@ -13,7 +13,7 @@ This license can be found at: */ #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include #include @@ -154,7 +154,7 @@ bool VBufBackend_t::invalidateSubtree(VBufStorage_controlFieldNode_t* node) { LOG_DEBUGWARNING(L"Node at "<requiresParentUpdate) { node->allowReuseInAncestorUpdate=false; auto parent=node->getParent(); @@ -173,7 +173,7 @@ bool VBufBackend_t::invalidateSubtree(VBufStorage_controlFieldNode_t* node) { } } // If this node is an ancestor of one or more already invalid nodes, - // Ensure that the already invalid node and any of its ancestors (up to but not including) this node, are marked as non-reusable. + // Ensure that the already invalid node and any of its ancestors (up to but not including) this node, are marked as non-reusable. // Then remove those nodes from the invalidation list. pendingInvalidSubtreesList.remove_if([node](auto i){ return markNodeAsNonreusableIfInAncestor(i,node); @@ -251,7 +251,7 @@ void VBufBackend_t::destroy() { } VBufBackend_t::~VBufBackend_t() { - LOG_DEBUG(L"base Backend destructor called"); + LOG_DEBUG(L"base Backend destructor called"); nhAssert(runningBackends.count(this) == 0); } diff --git a/nvdaHelper/vbufBase/backend.h b/nvdaHelper/vbufBase/backend.h index 1a8fdff880d..4835733c862 100644 --- a/nvdaHelper/vbufBase/backend.h +++ b/nvdaHelper/vbufBase/backend.h @@ -16,7 +16,7 @@ This license can be found at: #define VIRTUALBUFFER_BACKEND_H #include -#define WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN #include #include "storage.h" #include @@ -55,7 +55,7 @@ static LRESULT CALLBACK destroy_callWndProcHook(int code, WPARAM wParam, LPARAM /** * the list of control field nodes that should be re-rendered the next time the backend is updated. - * the list is in an order such that any parent is before any child. + * the list is in an order such that any parent is before any child. */ VBufStorage_controlFieldNodeList_t pendingInvalidSubtreesList; @@ -100,12 +100,12 @@ static LRESULT CALLBACK destroy_callWndProcHook(int code, WPARAM wParam, LPARAM * @param buffer the buffer to render content in. * @param docHandle the doc handle to start from * @param ID the ID to start from. - * @param oldNode an optional node that will be replaced by the rendered content (useful for retreaving cached data) + * @param oldNode an optional node that will be replaced by the rendered content (useful for retreaving cached data) */ virtual void render(VBufStorage_buffer_t* buffer, int docHandle, int ID, VBufStorage_controlFieldNode_t* oldNode=NULL)=0; /** - * Updates the content of the buffer. + * Updates the content of the buffer. * If no content yet exists it renders the entire document. If content exists it only re-renders nodes marked as invalid. */ void update(); @@ -170,7 +170,7 @@ static LRESULT CALLBACK destroy_callWndProcHook(int code, WPARAM wParam, LPARAM * Fetches an existing node from this backend, so that it can be added to a temporary buffer as a reference node during a partial render. * This method should only be called from within a backend's render method. * If the node exists but it is currently marked for re-rendering, - * The node is unmarked for re-rendering, but not returned. + * The node is unmarked for re-rendering, but not returned. * this allows the current render in progress (that called this method) to go ahead and re-render that node itself like it had never existed. */ VBufStorage_controlFieldNode_t* reuseExistingNodeInRender(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, int docHandle, int ID) ; diff --git a/nvdaHelper/vbufBase/storage.cpp b/nvdaHelper/vbufBase/storage.cpp index 44ff05bd648..236c970c5e4 100644 --- a/nvdaHelper/vbufBase/storage.cpp +++ b/nvdaHelper/vbufBase/storage.cpp @@ -158,7 +158,7 @@ bool VBufStorage_fieldNode_t::matchAttributes(const std::vector& a for (vector::const_iterator attribName = attribs.begin(); attribName != attribs.end(); ++attribName) { outputEscapedAttribute(regexpInput, *attribName); regexpInput << L":"; - // A given attribute can start with a parent prefix, which means the parent node will be checked for that attribute instead of this one. + // A given attribute can start with a parent prefix, which means the parent node will be checked for that attribute instead of this one. // E.g. "parent::IAccessible2::role". // Although we will only redirect the attribute to the parent if the parent prefix is found at the very beginning of the string (I.e. index 0), // an attribute like "blah_grandparent::color" is not an error and will be processed literally like any other attribute. @@ -291,7 +291,7 @@ void VBufStorage_fieldNode_t::getTextInRange(int startOffset, int endOffset, std childLength=child->length; nhAssert(childLength>=0); //length can't be negative childEnd+=childLength; - LOG_DEBUG(L"child with offsets of "<startOffset&&endOffset>childStart&&(!filter||filter(child))) { LOG_DEBUG(L"child offsets overlap requested offsets"); child->getTextInRange(max(startOffset,childStart)-childStart,min(endOffset-childStart,childLength),text,useMarkup,filter); @@ -370,8 +370,8 @@ void VBufStorage_controlFieldNode_t::disassociateFromBuffer(VBufStorage_buffer_t this->VBufStorage_fieldNode_t::disassociateFromBuffer(buffer); } -VBufStorage_controlFieldNode_t::VBufStorage_controlFieldNode_t(int docHandle, int ID, bool isBlockArg): VBufStorage_fieldNode_t(0,isBlockArg), identifier(docHandle,ID) { - LOG_DEBUG(L"controlFieldNode initialization at "<VBufStorage_fieldNode_t::getDebugInfo()<VBufStorage_fieldNode_t::getDebugInfo()<rootNode=node; - } else { + } else { if(previous==NULL) { LOG_DEBUG(L"Making node first child of parent"); parent->firstChild=node; @@ -526,7 +526,7 @@ void VBufStorage_buffer_t::deleteNode(VBufStorage_fieldNode_t* node) { void VBufStorage_buffer_t::deleteSubtree(VBufStorage_fieldNode_t* node) { nhAssert(node); //node can't be null LOG_DEBUG(L"deleting subtree starting at "<getDebugInfo()); - //Save off next before deleting the subtree + //Save off next before deleting the subtree for(VBufStorage_fieldNode_t* child=node->firstChild;child!=NULL;) { VBufStorage_fieldNode_t* next=child->next; deleteSubtree(child); @@ -565,7 +565,7 @@ VBufStorage_controlFieldNode_t* VBufStorage_buffer_t::addControlFieldNode(VBufS } LOG_DEBUG(L"Add controlFieldNode using parent at "<identifier)>0) { - LOG_DEBUGWARNING(L"Buffer at "<getDebugInfo()<getDebugInfo()<& m) { VBufStorage_controlFieldNode_t* parent=NULL; VBufStorage_fieldNode_t* previous=NULL; - //Using the current selection start, record a list of ancestor fields by their identifier, + //Using the current selection start, record a list of ancestor fields by their identifier, //and a relative offset of the selection start to those fields, so that the selection can be corrected after the replacement. VBufStorage_relativeSelection_t identifierList; if(this->getTextLength()>0) { @@ -657,7 +657,7 @@ bool VBufStorage_buffer_t::replaceSubtrees(mapfirst; auto buffer=subtreeEntryIter->second; @@ -739,8 +739,8 @@ bool VBufStorage_buffer_t::replaceSubtrees(mapidentifier.docHandle; if(ID) *ID=controlFieldNode->identifier.ID; - LOG_DEBUG(L"Found node, returning "<getDebugInfo()); + LOG_DEBUG(L"Found node, returning "<getDebugInfo()); return controlFieldNode; } @@ -1031,7 +1031,7 @@ VBufStorage_fieldNode_t* VBufStorage_buffer_t::findNodeByAttributes(int offset, bufferEnd=bufferStart+node->length; LOG_DEBUG(L"start is now "<length>0&&!(node->isHidden)&&node->matchAttributes(attribsList,regexObj)) { - //Skip first containing parent match or parent match where offset hasn't changed + //Skip first containing parent match or parent match where offset hasn't changed if((bufferStart==offset)||(!skippedFirstMatch&&bufferStartoffset)) { LOG_DEBUG(L"skipping initial parent"); skippedFirstMatch=true; diff --git a/nvdaHelper/vbufBase/storage.h b/nvdaHelper/vbufBase/storage.h index 5dbd971847c..b0dd5bd31ff 100644 --- a/nvdaHelper/vbufBase/storage.h +++ b/nvdaHelper/vbufBase/storage.h @@ -52,10 +52,10 @@ typedef std::list> VBufS /** * a list of control field nodes. */ -typedef std::list VBufStorage_controlFieldNodeList_t; +typedef std::list VBufStorage_controlFieldNodeList_t; -/** - * Holds values that can together uniquely identify a control field in a buffer. +/** + * Holds values that can together uniquely identify a control field in a buffer. * It can also be compaired with others of its type as being less, greater, equal, or not equal, based on its values. */ class VBufStorage_controlFieldNodeIdentifier_t { @@ -75,7 +75,7 @@ class VBufStorage_controlFieldNodeIdentifier_t { * constructor. * @param docHandle the value you wish for the C{docHandle} member. * @param ID the value you wish for the C{ID} member. - */ + */ VBufStorage_controlFieldNodeIdentifier_t(int docHandle=0, int ID=0); bool operator<(const VBufStorage_controlFieldNodeIdentifier_t&) const; @@ -106,7 +106,7 @@ class VBufStorage_fieldNode_t { VBufStorage_controlFieldNode_t* parent; /** - * points to the node directly before this node that shares the same parent as this node. + * points to the node directly before this node that shares the same parent as this node. */ VBufStorage_fieldNode_t* previous; @@ -116,7 +116,7 @@ class VBufStorage_fieldNode_t { VBufStorage_fieldNode_t* next; /** - * points to this node's first child. + * points to this node's first child. * The child will have no previous node, and it will have this node as its parent. */ VBufStorage_fieldNode_t* firstChild; @@ -148,7 +148,7 @@ class VBufStorage_fieldNode_t { VBufStorage_fieldNode_t* nextNodeInTree(int direction, VBufStorage_fieldNode_t* limitNode, int *relativeStartOffset); /** - * Calculates the offset for this node relative to the surrounding tree. + * Calculates the offset for this node relative to the surrounding tree. * @return the offset of the node. */ int calculateOffsetInTree() const; @@ -158,7 +158,7 @@ class VBufStorage_fieldNode_t { * @param offset the offset with in this node. * @param relativeOffset memory where the offset relative to the found node can be placed * @return the descendant textFieldNode at that offset, or NULL if none there. - */ + */ virtual VBufStorage_textFieldNode_t*locateTextFieldNodeAtOffset(int offset, int *relativeOffset); /** @@ -170,16 +170,16 @@ class VBufStorage_fieldNode_t { /** * Generates the attributes within a markup opening tag. * @param text where to place the generated text - * @param the offset within the node where text is being requested from - * @param the offset within the node the text is being requested to. + * @param the offset within the node where text is being requested from + * @param the offset within the node the text is being requested to. */ virtual void generateAttributesForMarkupOpeningTag(std::wstring& text, int startOffset, int endOffset); /** * generates a markup opening tag for this field. * @param text a string to append the tag to. - * @param the offset within the node where text is being requested from - * @param the offset within the node the text is being requested to. + * @param the offset within the node where text is being requested from + * @param the offset within the node the text is being requested to. */ void generateMarkupOpeningTag(std::wstring& text,int startOffset, int endOffset); @@ -237,7 +237,7 @@ class VBufStorage_fieldNode_t { inline VBufStorage_controlFieldNode_t* getParent() { return this->parent; } /** - * points to the node directly before this node that shares the same parent as this node. + * points to the node directly before this node that shares the same parent as this node. */ inline VBufStorage_fieldNode_t* getPrevious() { return this->previous; } @@ -248,7 +248,7 @@ class VBufStorage_fieldNode_t { /** - * points to this node's first child. + * points to this node's first child. * The child will have no previous node, and it will have this node as its parent. */ inline VBufStorage_fieldNode_t* getFirstChild() { return this->firstChild; } @@ -282,12 +282,12 @@ class VBufStorage_fieldNode_t { /** * fetches the text between given offsets in this node and its descendants, with optional markup. * @param startOffset the offset to start from. - * @param endOffset the offset to end at. Use -1 to mean node's end offset. + * @param endOffset the offset to end at. Use -1 to mean node's end offset. * @param text a string in whish to append the text. * @param useMarkup if true then markup indicating opening and closing of fields will be included. * @param filter: a function that takes the current recursive node and returns true if text should be fetched and false if it should be skipped. * @return true if successfull, false otherwize. - */ + */ virtual void getTextInRange(int startOffset, int endOffset, std::wstring& text, bool useMarkup=false,bool(*filter)(VBufStorage_fieldNode_t*)=NULL); /** @@ -335,22 +335,22 @@ class VBufStorage_controlFieldNode_t : public VBufStorage_fieldNode_t { const VBufStorage_controlFieldNodeIdentifier_t identifier; /** - * If true, When this node is invalidated in a backend, its parent will be invalidated instead. - * Parent invalidation is also recursive, so that if the parent node sets this variable to true, then the first ancestor that does not set this to true is used for invalidation. + * If true, When this node is invalidated in a backend, its parent will be invalidated instead. + * Parent invalidation is also recursive, so that if the parent node sets this variable to true, then the first ancestor that does not set this to true is used for invalidation. * An example where this might be set is on parts of a table where it is necessary for the table itself to be re-rendered if any part changes. */ bool requiresParentUpdate {false}; /** - * If true, this node is allowing itself to be reused within a subtree that is being re-rendered. + * If true, this node is allowing itself to be reused within a subtree that is being re-rendered. * This is true by default, but may be set to false if this node or a descendant needs to be re-rendered but its requiresParentUpdate is true. - * In that case, the re-render will happen higher up in the ancestors, but ensures that this node is not reused. + * In that case, the re-render will happen higher up in the ancestors, but ensures that this node is not reused. */ bool allowReuseInAncestorUpdate {true}; /** * If True, this node cannot be moved and reused within a subtree being re-rendered, if its previous siblings have changed in anyway. - * An example might be where a table is re-rendered and a new row is added in the middle. + * An example might be where a table is re-rendered and a new row is added in the middle. * In this case, all rows and cells after the new row must not be reused as their table coordinates would have changed. */ bool denyReuseIfPreviousSiblingsChanged {false}; @@ -379,7 +379,7 @@ class VBufStorage_controlFieldNode_t : public VBufStorage_fieldNode_t { /** * a node that represents a field of text in a buffer. - * It holds the actual text it represents, and also sets its length accordingly. + * It holds the actual text it represents, and also sets its length accordingly. */ class VBufStorage_textFieldNode_t : public VBufStorage_fieldNode_t { protected: @@ -418,13 +418,13 @@ class VBufStorage_referenceNode_t: public VBufStorage_controlFieldNode_t { public: VBufStorage_controlFieldNode_t* referenceNode; VBufStorage_referenceNode_t(int docHandle, int ID, VBufStorage_controlFieldNode_t* r): VBufStorage_controlFieldNode_t(docHandle,ID,false), referenceNode(r) {}; - void generateMarkupTagName(std::wstring& text) { text.append(L"reference"); }; + void generateMarkupTagName(std::wstring& text) { text.append(L"reference"); }; }; /** * a buffer that can store text with overlaying fields. * it stores the text and fields in an internal tree of nodes. - */ + */ class VBufStorage_buffer_t { protected: @@ -459,7 +459,7 @@ class VBufStorage_buffer_t { /** * the offset at where the current selection starts. - */ + */ int selectionStart; /** @@ -477,7 +477,7 @@ class VBufStorage_buffer_t { * @param parent a control field already in the buffer that should be the inserted node's parent, note if also specifying previous then parent can be NULL. * @param previous the field already in the buffer that the inserted node will come directly after, note previous's parent will always be used over the parent argument. * @param node the node being inserted. - */ + */ bool insertNode(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, VBufStorage_fieldNode_t* node); /** @@ -513,13 +513,13 @@ class VBufStorage_buffer_t { * @param parent the control field which should be the new field's parent, note that if also specifying previous parent can be NULL. * @param previous the field which the new field should come directly after, note that previous's parent will be used over the parent argument, and previous can also not be the buffer's root node (first field added). * @param docHandle the docHandle you wish the new control field node to have - * @param ID the ID you wish the new control field node to have. + * @param ID the ID you wish the new control field node to have. * @param isBlock if true then the buffer will force a line break at the start and end of the new control. * @return the newly added control field. */ VBufStorage_controlFieldNode_t* addControlFieldNode(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, int docHandle, int ID, bool isBlock); - - VBufStorage_controlFieldNode_t* addControlFieldNode(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, VBufStorage_controlFieldNode_t* node); + + VBufStorage_controlFieldNode_t* addControlFieldNode(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, VBufStorage_controlFieldNode_t* node); /** * Adds a text field in to the buffer. @@ -541,7 +541,7 @@ class VBufStorage_buffer_t { /** * Removes the given nodes from the buffer and then merges the content of the new buffers in the removed node's position. It also tries to keep the selection relative to the control field it was in before the replacement. - * @param m the map of nodes to buffers + * @param m the map of nodes to buffers */ bool replaceSubtrees(std::map& m); @@ -594,7 +594,7 @@ class VBufStorage_buffer_t { * @return the located control field node. */ virtual VBufStorage_controlFieldNode_t* locateControlFieldNodeAtOffset(int offset, int *startOffset, int *endOffset, int* docHandle, int* ID); - + /** * locates the controlFieldNode with the given identifier * @param docHandle the docHandle of the control field node you wish to find @@ -664,7 +664,7 @@ class VBufStorage_buffer_t { * @param startOffset memory to place the calculated line start offset * @param endOffset memory to place the calculated line end offset * @return true if successfull, false otherwize. - */ + */ virtual bool getLineOffsets(int offset, int maxLineLength, bool useScreenLayout, int *startOffset, int *endOffset); /** @@ -687,7 +687,7 @@ class VBufStorage_buffer_t { * @param previous the previous node in this buffer of the added reference node. * @param node the existing node from another buffer that the reference node should point to. */ - VBufStorage_referenceNode_t* addReferenceNodeToBuffer(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, VBufStorage_controlFieldNode_t* node); + VBufStorage_referenceNode_t* addReferenceNodeToBuffer(VBufStorage_controlFieldNode_t* parent, VBufStorage_fieldNode_t* previous, VBufStorage_controlFieldNode_t* node); virtual std::wstring getDebugInfo() const; diff --git a/nvdaHelper/vbufBase/utils.cpp b/nvdaHelper/vbufBase/utils.cpp index 306efd626b5..298eef32e40 100644 --- a/nvdaHelper/vbufBase/utils.cpp +++ b/nvdaHelper/vbufBase/utils.cpp @@ -98,7 +98,7 @@ wstring getNameForURL(const wstring &url) { name += L' ' + url.substr(queryStart + 1, queryLen); if (anchorStart != wstring::npos) name += L' ' + url.substr(anchorStart + 1); - //Finally truncate to 30 chars + //Finally truncate to 30 chars if(name.length()>30) { name=name.substr(0,30)+L'\x2026'; } diff --git a/projectDocs/community/releaseProcess.md b/projectDocs/community/releaseProcess.md index c7ace31e519..c2d7a99a579 100644 --- a/projectDocs/community/releaseProcess.md +++ b/projectDocs/community/releaseProcess.md @@ -4,7 +4,7 @@ This document provides rough guidelines for the process of developing NVDA relea All current and potential developers, add-on developers and translators should read and follow this document. These guidelines may be broken under special circumstances. Any concerns should be discussed via [GitHub Discussion](https://github.com/nvaccess/nvda/discussions), issue or pull request. - + ## Release Workflow This is the general release workflow. Information for specific community groups is provided in later sections. @@ -41,7 +41,7 @@ The production of a release consists of the following: * Once a pull request has been reviewed and approved by at least one NV Access employee and all relevant build checks have passed, NV Access will squash merge the pull request into master. * If the merging of a pull request to `master` causes any build checks on `master` to fail, the pull request is reverted without question. This is however unlikely to be an issue as build checks on the pull request itself must have already passed. -* If a merged pull request has been identified as causing a regression, new bug, or does not work as originally reported, the pull request may be reverted at the discretion of the lead developers. Reasons in favor of not reverting the pull request may be: +* If a merged pull request has been identified as causing a regression, new bug, or does not work as originally reported, the pull request may be reverted at the discretion of the lead developers. Reasons in favor of not reverting the pull request may be: * The pull request was submitted by an active collaborator who is likely to follow up with a suitable pull request to address the issues. * The bug is trivial enough to be fixed by a collaborator. * Use the [PR revert template](../../.github/PULL_REQUEST_TEMPLATE/revert.md) when reverting. @@ -50,7 +50,7 @@ This is however unlikely to be an issue as build checks on the pull request itse ### Beta phase * A commit without any known serious issues, will be selected from the 'master' branch and merged into 'beta', this draws the line for features included in the release. * Documentation changes will be reviewed. A release summary will be added to the change log for the beta. -* A tagged 'beta release' will be created for wider testing. +* A tagged 'beta release' will be created for wider testing. * New pull requests may be now considered for squash merging straight to beta. - If addressing regression introduced in this release. - If addressing a bug in a "must have" feature for this release. diff --git a/projectDocs/design/hidBrailleTechnicalNotes.md b/projectDocs/design/hidBrailleTechnicalNotes.md index ade850ea364..53dd2e5a683 100644 --- a/projectDocs/design/hidBrailleTechnicalNotes.md +++ b/projectDocs/design/hidBrailleTechnicalNotes.md @@ -16,7 +16,7 @@ There are also several terms in HID which may be confusing to those just beginni * Collections * Caps (Capabilities) -These terms are described in the subsections below. +These terms are described in the subsections below. #### HID descriptors At connection time, a HID device must expose a block of data over the connection called a descriptor. @@ -46,7 +46,7 @@ On Windows the report ID can be found in the `HIDP_VALUE_CAPS` (value capabiliti #### HID collections HID controls are grouped into collections. -Some examples might be all the keys on a keyboard, or all the cells in a line of Braille. +Some examples might be all the keys on a keyboard, or all the cells in a line of Braille. Each defined collection has a Usage Page and a Usage ID so it can be uniquely identified. All HID devices have a top-level collection, which is the main point of entry for gathering information about the device, including fetching other collections. These other collections are known as Linked collections. @@ -57,7 +57,7 @@ E.g. `HidP_GetCaps` gets the capabilities of the HID device. These include things like the number of input buttons or output values on the device, the size of reports, and the Usage and Usage Page for the device. Similarly `HidP_GetButtonCaps` gets the capabilities of all buttons on the device. Capabilities of buttons and values include such things as their Usage and Usage Page, whether they represent a range of Usages, and whether they have a NULL state etc. - + ### General pattern for supporting HID on Windows #### Enumerating HID devices * Fetch the class guid for HID devices with `HidD_GetHidGuid` @@ -66,14 +66,14 @@ Capabilities of buttons and values include such things as their Usage and Usage * For each data structure fetched, call `SetupDiGetDeviceInterfaceDetail` to get a `SP_DEVICE_INTERFACE_DETAIL_DATA` structure. * The `SP_DEVICE_INTERFACE_DETAIL_DATA` structure's devicePath member is the path that should be used to open the device for reading / writing later. * Some other properties such as hardwareID may be required to further identify the device, these can be fetched with `SetupDiGetDeviceRegistryProperty`. -* For an implementation see `listHidDevices` in NVDA's source/hwPortUtils.py +* For an implementation see `listHidDevices` in NVDA's source/hwPortUtils.py #### Opening a HID device * Use `CreateFile` to open a HID device, giving it the DevicePath as the file path. Note overlapped IO is possible; See `CreateFile` documentation. * If this device may need to be opened by other processes at the same time, you will want to specify `FILE_SHARE_READ | FILE_SHARE_WRITE` as well. * Once the open device handle is no longer needed, it can be closed with `CloseHandle`. -* For an implementation see the `Hid` class in NVDA's source/hwIo/base.py +* For an implementation see the `Hid` class in NVDA's source/hwIo/base.py #### Fetching device attributes * To fetch info such as vendorID, productID and versionNumber, call `HidD_GetAttributes` on the open device handle. @@ -85,7 +85,7 @@ Fetching device capabilities, getting data from reports and setting data in repo Windows represents the HID descriptor as an opaque value referred to as the preparsed data. * Fetch the device's preparsed data with `HidD_GetPreparsedData`, giving it the open device handle. Note this must be freed once it is no longer needed with `HidD_FreePreparsedData`. - + #### Fetching device capabilities * To find out a top-level collection's Usage Page, Usage, number of input and output values, and report sizes, fetch a `HIDP_CAPS` structure for the device with `HidP_GetCaps`, giving the open device handle and the preparsed data. @@ -95,7 +95,7 @@ An array of these structures can be fetched with `HidP_GetValueCaps` for input o Sometimes a `HIDP_VALUE_CAPS` structure can represent a range of buttons or values, where minimum and maximum Usage IDs and Data indices are exposed, rather than a specific value. Examples of these might be the way that Braille dot input keys are exposed. There is only one `HIDP_VALUE_CAPS` structure, covering values from dot1 to dot8. - + #### Reading data from the device * Use `ReadFile` to read the next available input report from the device. The size of data to read in bytes must be equal to the `InputReportByteLength` member of the device's `HIDP_CAPS` structure. @@ -146,7 +146,7 @@ In other words, the index within its collection. this is needed in some implementations to work out which routing key a value represents, as the Usage ID for the value will be just ROUTING_KEY and the collection will be one of the ROUTER_SET_* collection Usage IDs. #### Writing cells to the device -* Create a HID output report (block of memory), setting the report ID (first byte) to the value of the ReportID member of the Braille cell `HIDP_VALUE_CAPS` structure found at construction time. +* Create a HID output report (block of memory), setting the report ID (first byte) to the value of the ReportID member of the Braille cell `HIDP_VALUE_CAPS` structure found at construction time. * Call `HidP_SetUsageValueArray` to place the data (braille cell dot patterns) into the report at the appropriate place, Using the Usage ID and collection number etc from the cell `HIDP_VALUE_CAPS` structure. * Send the report to the Braille display using `WriteFile`. The number of bytes written will be the value of `HIDP_CAPS.OutputReportByteLength`. diff --git a/projectDocs/design/startupShutdown.md b/projectDocs/design/startupShutdown.md index 7fc1097f4b4..980d0dd6206 100644 --- a/projectDocs/design/startupShutdown.md +++ b/projectDocs/design/startupShutdown.md @@ -10,7 +10,7 @@ 1. Automatically by Ease of Access after signing in to Windows 1. For an installed copy, portable copy, installer: 1. An exiting instance of NVDA starting a new process (see shutting down procedures) - 1. By running the exe. + 1. By running the exe. - This can be triggered by a user or external process such as an existing NVDA instance - test: `startupShutdownNVDA.Starts` 1. For source: eg runnvda.bat @@ -29,7 +29,7 @@ - test: `startupShutdownNVDA.Restarts on crash, Restarts on braille crash` 1. An unhandled crash (terminates unsafely) - requires manual testing/confirmation -1. An external command which kills the process (terminates unsafely) +1. An external command which kills the process (terminates unsafely) 1. Windows shutting down (terminates unsafely) (uses `wx.EVT_END_SESSION`) ## Manual testing diff --git a/projectDocs/design/technicalDesignOverview.md b/projectDocs/design/technicalDesignOverview.md index c567d6e9a02..aa739ea30f8 100644 --- a/projectDocs/design/technicalDesignOverview.md +++ b/projectDocs/design/technicalDesignOverview.md @@ -41,7 +41,7 @@ See also: - [The Linux Foundation IA2 reference](https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/) - [IA2 event constants](https://accessibility.linuxfoundation.org/a11yspecs/ia2/docs/html/_accessible_event_i_d_8idl.html) - From the perspective of Windows, the IA2 event constants are considered custom "application specific" event IDs. -- [IA2 Project (IDL files)](https://github.com/LinuxA11y/IAccessible2) +- [IA2 Project (IDL files)](https://github.com/LinuxA11y/IAccessible2) - [Windows event constants](https://docs.microsoft.com/en-us/windows/win32/winauto/event-constants) @@ -88,7 +88,7 @@ Refer to [startupShutdown documentation](./startupShutdown.md). The core (in the function `core.main`) loads the configuration, initialises all other components and then enters the main loop. In each iteration of the main loop, the core pumps the [API](#api-handlers) and [input](#input-handlers) handlers, [registered generators](#registered-generators) and the main queue. All events, scripts, etc. are indirectly queued to this main queue by API and input handlers, so pumping the main queue causes these to be executed. -At the end of the iteration, the core then goes to sleep until more work is added to the main queue, at which point the core will again wake and perform another iteration. +At the end of the iteration, the core then goes to sleep until more work is added to the main queue, at which point the core will again wake and perform another iteration. The main loop continues to iterate / sleep until NVDA is instructed to exit either by the user or a newly started copy of NVDA. Once NVDA is instructed to exit, the core terminates all other components, saves the configuration if appropriate and then exits. @@ -148,7 +148,7 @@ NVDA objects that might be used in any application are contained in the NVDAObje A part from properties such as a widget's name, role, states etc, NVDA objects also include relational properties such as parent, next, previous and first child. These allow both the user and code to navigate the entire Operating System and its applications in a tree-like structure. The root of the tree being the Desktop, whose children is all the top-level windows for all open applications, each containing further subtrees of more widgets representing an application's user interface. - + ### Text Ranges When working with editable text controls, NVDA needs to be able to obtain information about the text in the widget. Aside from just retrieving the entire text, proper navigation requires retrieval of specific units of text (e.g. paragraphs, lines, words and characters), as well as the ability to find and set the location of the caret and selection. @@ -161,9 +161,9 @@ TextInfo objects contain properties and methods to: * Move or expand the range by units such as character, word, line and paragraph * compare the start and end of a range with itself or another range * Fetch the text and formatting of the range - + You can fetch a TextInfo object from an NVDA object via its `makeTextInfo` method, passing in the particular `textInfos.POSITION_*` constant depending on whether you want to fetch a range representing the position of the caret, selection, start or end of the text, or the entire text. - + ### Global Commands The global commands object (`globalCommands.GlobalCommands`) contains built-in global scripts; i.e. they can be executed everywhere. @@ -227,7 +227,7 @@ Adding controls to a ``wx.StaticBoxSizer`` by adding them to its parent causes u This has caused problems with users with right-to-left language locales. wxWidgets requires that these items be added directly to the `StaticBox` associated with the `wx.StaticBoxSizer` via `GetStaticBox()`. -**Before (buggy behaviour):** +**Before (buggy behaviour):** ```python sizer = new wx.StaticBoxSizer(wx.VERTICAL, parent, "Test") @@ -235,7 +235,7 @@ sizer.Add(wx.StaticText(parent, wx.ID_ANY, "Where am I?")) sizer.Add(wx.Button(parent, wx.ID_ADD)) ``` -**After:** +**After:** ```python sizer = new wx.StaticBoxSizer(wx.VERTICAL, parent, "Test") @@ -271,12 +271,12 @@ Global plugins, app modules and tree interceptors are passed a handler function e.g. the object itself. Although an event is always for a particular NVDA object, it first has a chance of being handled by global plugins, app modules or tree interceptors. -If an event is handled by one of these, meaning that an `event_*` method was found and executed, the event stops there and does not go further, unless the method that handled it specifically calls the `nextHandler` function object passed to it. +If an event is handled by one of these, meaning that an `event_*` method was found and executed, the event stops there and does not go further, unless the method that handled it specifically calls the `nextHandler` function object passed to it. The chain of handlers is as follows: * The first found global plugin * The next found global plugin (until no more are found) -* The app module containing the NVDA object the event is for, I.e. fetched from the NVDA object's `appModule` property. +* The app module containing the NVDA object the event is for, I.e. fetched from the NVDA object's `appModule` property. * The tree interceptor containing the NVDA object the event is for. I.e. fetched from the NVDA object's `treeInterceptor` property if the property is not `None` * The NVDA object itself. @@ -290,7 +290,7 @@ These are inherited from `baseObject.ScriptableObject`. Similar to events, input gestures have a chance to be handled by a script at one of many levels. But unlike events, once an input gesture finds and executes a script, there is no clean way to have the input gesture handled by a subsequent level. - + The chain of handlers is as follows: * The first found global plugin * The next found global plugin (until no more are found) @@ -300,7 +300,7 @@ The chain of handlers is as follows: * the first ancestor (parent) of the currently focused NVDAObject, if the found script's `canPropagate` property is `True` * the next ancestor of the currently focused NVDAObject, if the found script's `canPropagate` property is `True`... * Global commands - + ## Inter-process Communication In general terms, every running application or service on a computer, including NVDA, is a separate process. No process can access data in another process except via special operating system mechanisms. diff --git a/projectDocs/dev/buildSystemNotes.md b/projectDocs/dev/buildSystemNotes.md index 11f51681994..44a61741978 100644 --- a/projectDocs/dev/buildSystemNotes.md +++ b/projectDocs/dev/buildSystemNotes.md @@ -46,11 +46,11 @@ The following files contain the main implementation of the virtual environment s #### `venvUtils/ensureAndActivate.bat` - Activates the virtual environment. - - If necessary, creates and configures it first. - - The virtual environment is left active. + - If necessary, creates and configures it first. + - The virtual environment is left active. #### `venvUtils/venvCmd.bat` - Uses `ensureAndActivate.bat` to run a command within the context - of the virtual environment. + of the virtual environment. - The virtual environment is deactivated after the command completes. - All entry point scripts depend on this. diff --git a/projectDocs/dev/buildingNVDAOnAppVeyor.md b/projectDocs/dev/buildingNVDAOnAppVeyor.md index 7f592a299ad..77cb4e592d2 100644 --- a/projectDocs/dev/buildingNVDAOnAppVeyor.md +++ b/projectDocs/dev/buildingNVDAOnAppVeyor.md @@ -395,7 +395,7 @@ notifications: {{/jobs}}

on_build_success: true on_build_failure: true - on_build_status_changed: true + on_build_status_changed: true ``` Save your edit, and you should now receive detailed email notifications to the committer email address you use with git, whenever a build succeeds or fails. diff --git a/projectDocs/dev/contributing.md b/projectDocs/dev/contributing.md index 4585db5054d..5b1c199d9c1 100644 --- a/projectDocs/dev/contributing.md +++ b/projectDocs/dev/contributing.md @@ -97,7 +97,7 @@ For instance: You may add descriptions for multiple sections. The sections are: - + * New features * Changes * Bug fixes diff --git a/projectDocs/dev/createDevEnvironment.md b/projectDocs/dev/createDevEnvironment.md index 729bf3f1425..ff1f5b67ddf 100644 --- a/projectDocs/dev/createDevEnvironment.md +++ b/projectDocs/dev/createDevEnvironment.md @@ -46,7 +46,7 @@ To replicate the production build environment, use the 3.11.x minor version of P #### Microsoft Visual Studio * Microsoft Visual Studio 2022 - * To replicate the production build environment, use the [version of Visual Studio 2022 that AppVeyor is using](https://www.appveyor.com/docs/windows-images-software/#visual-studio-2022). + * To replicate the production build environment, use the [version of Visual Studio 2022 that AppVeyor is using](https://www.appveyor.com/docs/windows-images-software/#visual-studio-2022). * When you do not use the Visual Studio IDE itself, you can download the [build tools](https://aka.ms/vs/17/release/vs_BuildTools.exe) * When you are intending to use the Visual Studio IDE (not required for NVDA development), you can download [the community version](https://aka.ms/vs/17/release/vs_Community.exe), which is also used by AppVeyor * The Professional and Enterprise versions are also supported @@ -93,7 +93,7 @@ For reference, the following run time dependencies are included in Git submodule * [wil](https://github.com/microsoft/wil/) * [NVDA DiffMatchPatch](https://github.com/codeofdusk/nvda_dmp) -Additionally, the following build time dependencies are included in the miscDeps git submodule: +Additionally, the following build time dependencies are included in the miscDeps git submodule: * xgettext and msgfmt from [GNU gettext](https://sourceforge.net/projects/cppcms/files/boost_locale/gettext_for_windows/) diff --git a/projectDocs/dev/deprecations.md b/projectDocs/dev/deprecations.md index ce0f13c7f52..7ce0d863b15 100644 --- a/projectDocs/dev/deprecations.md +++ b/projectDocs/dev/deprecations.md @@ -31,7 +31,7 @@ In order to improve the NVDA API, changes that will break future compatibility m This can be done by using a version check to automate deprecation. For example, if you wish to replace usages of `deprecatedSymbolName` with `newSymbolName`. -When we begin work on `NEXT_YEAR`, `deprecatedSymbolName` will no longer be part of the NVDA API and all internal usages must be removed prior. +When we begin work on `NEXT_YEAR`, `deprecatedSymbolName` will no longer be part of the NVDA API and all internal usages must be removed prior. ```python from buildVersion import version_year @@ -65,7 +65,7 @@ import controlTypes dir(controlTypes) ``` -Changes different to moving or renaming symbols need to be considered carefully with a different approach. +Changes different to moving or renaming symbols need to be considered carefully with a different approach. Any API breaking changes such as deprecations marked for removal should be commented with the year of intended removal, and notes on how to implement the API change as an add-on developer and NVDA developer. diff --git a/projectDocs/dev/developerGuide/developerGuide.md b/projectDocs/dev/developerGuide/developerGuide.md index c31fd971193..7571cf02a4f 100644 --- a/projectDocs/dev/developerGuide/developerGuide.md +++ b/projectDocs/dev/developerGuide/developerGuide.md @@ -377,7 +377,7 @@ Both App Modules and Global Plugins share a common look and feel. They are both Python source files (with a .py extension), they both define a special class containing all events, scripts and bindings, and they both may define custom classes to access controls, text content and complex documents. However, they do differ in some ways. -Custom appModules and globalPlugins can be packaged into NVDA add-ons. +Custom appModules and globalPlugins can be packaged into NVDA add-ons. This allows easy distribution, and provides a safe way for the user to install and uninstall the custom code. Please refer to the [Add-ons section](#Addons) later on in this document. @@ -416,14 +416,14 @@ For example to map the App Module named "time_app_mod" to the "time" executable import appModuleHandler import globalPluginHandler - - + + class GlobalPlugin(globalPluginHandler.GlobalPlugin): - + def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) appModuleHandler.registerExecutableWithAppModule("time", "time_app_mod") - + def terminate(self, *args, **kwargs): super().terminate(*args, **kwargs) appModuleHandler.unregisterExecutable("time") @@ -444,16 +444,16 @@ Note though that if you move outside of Notepad - for instance, to Windows Explo --- start --- # Notepad App Module for NVDA # Developer guide example 1 - + import appModuleHandler - + class AppModule(appModuleHandler.AppModule): - + def event_gainFocus(self, obj, nextHandler): import tones tones.beep(550, 50) nextHandler() - + --- end --- This App Module file starts with two comment lines, which describe what the file is for. @@ -487,16 +487,16 @@ The following example is same as Notepad app module above except this is for an --- start --- # wwahost/test App Module for NVDA # Developer guide example 2 - + from nvdaBuiltin.appModules.wwahost import * - + class AppModule(AppModule): - + def event_gainFocus(self, obj, nextHandler): import tones tones.beep(550, 50) nextHandler() - + --- end --- The biggest difference from Notepad app module is where wwahost app module comes from. @@ -548,18 +548,18 @@ From anywhere, you can now press NVDA+shift+v to have NVDA's version spoken and --- start --- # Version announcement plugin for NVDA # Developer guide example 3 - + import globalPluginHandler from scriptHandler import script import ui import versionInfo - + class GlobalPlugin(globalPluginHandler.GlobalPlugin): - + @script(gesture="kb:NVDA+shift+v") def script_announceNVDAVersion(self, gesture): ui.message(versionInfo.version) - + --- end --- This Global Plugin file starts with two comment lines, which describe what the file is for. @@ -695,7 +695,7 @@ For example: gestures=["kb:NVDA+shift+t", "kb:NVDA+alt+r"] ) def script_sayDateTime(self, gesture): - + --- end --- In this example, your script will be listed in the input gestures dialog under the "Miscellaneous" category. @@ -750,14 +750,14 @@ Once saved in the right place, either restart NVDA or choose Reload Plugins foun --- start --- #Window utility scripts for NVDA #Developer guide example 4 - + import globalPluginHandler from scriptHandler import script import ui import api - + class GlobalPlugin(globalPluginHandler.GlobalPlugin): - + @script( description=_("Announces the window class name of the current focus object"), gesture="kb:NVDA+leftArrow" @@ -767,7 +767,7 @@ Once saved in the right place, either restart NVDA or choose Reload Plugins foun name = focusObj.name windowClassName = focusObj.windowClassName ui.message("class for %s window: %s" % (name, windowClassName)) - + @script( description=_("Announces the window control ID of the current focus object"), gesture="kb:NVDA+rightArrow" @@ -777,7 +777,7 @@ Once saved in the right place, either restart NVDA or choose Reload Plugins foun name = focusObj.name windowControlID = focusObj.windowControlID ui.message("Control ID for %s window: %d" % (name, windowControlID)) - + --- end --- ### Events {#events} @@ -838,11 +838,11 @@ As always, the file must have a .py extension. --- start --- import appModuleHandler - + class AppModule(appModuleHandler.AppModule): - + sleepMode = True - + --- end --- ### Providing Custom NVDA Object Classes {#customNVDAObjectClasses} @@ -887,19 +887,19 @@ The following code can be copied and pasted in to a text file, then saved in the from NVDAObjects.IAccessible import IAccessible import controlTypes import ui - + class AppModule(appModuleHandler.AppModule): - + def chooseNVDAObjectOverlayClasses(self, obj, clsList): if obj.windowClassName == "Edit" and obj.role == controlTypes.Role.EDITABLETEXT: clsList.insert(0, EnhancedEditField) - + class EnhancedEditField(IAccessible): - + @script(gesture="kb:NVDA+l") def script_reportLength(self, gesture): ui.message("%d" % len(self.value)) - + --- end --- ### Making Small Changes to an NVDA Object in App Modules {#smallChangesToNVDAObjectInAppModules} @@ -924,9 +924,9 @@ The following code can be copied and pasted in to a text file, then saved in the --- start --- import appModuleHandler from NVDAObjects.window import Window - + class AppModule(appModuleHandler.AppModule): - + def event_NVDAObject_init(self, obj): if isinstance(obj, Window) and obj.windowClassName == "Edit" and obj.windowControlID == 15: obj.name = "Content" @@ -1047,7 +1047,7 @@ The following plugins and drivers can be included in an add-on: If you need to execute code as your add-on is being installed or uninstalled from NVDA (e.g. to validate license information or to copy files to a custom location), you can provide a Python file called installTasks.py in the archive which contains special functions that NVDA will call while installing or uninstalling your add-on. This file should avoid loading any modules that are not absolutely necessary, especially Python C extensions or dlls from your own add-on, as this could cause later removal of the add-on to fail. -However, if this does happen, the add-on directory will be renamed and then deleted after the next restart of NVDA. +However, if this does happen, the add-on directory will be renamed and then deleted after the next restart of NVDA. Finally, it should not depend on the existence or state of other add-ons, as they may not be installed, have already been removed or not yet be initialized. #### the onInstall function {#onInstall} @@ -1201,7 +1201,7 @@ See [Snapshot Variables](#PythonConsoleSnapshotVariables) for more details. The console is similar to the standard interactive Python interpreter. Input is accepted one line at a time and processed when enter is pressed. -Multiple lines can be pasted at once from the clipboard and will be processed one by one. +Multiple lines can be pasted at once from the clipboard and will be processed one by one. You can navigate through the history of previously entered lines using the up and down arrow keys. Output (responses from the interpreter) will be spoken when enter is pressed. diff --git a/projectDocs/dev/featureFlags.md b/projectDocs/dev/featureFlags.md index 1abf40be4d0..fe86b44bfc1 100644 --- a/projectDocs/dev/featureFlags.md +++ b/projectDocs/dev/featureFlags.md @@ -13,7 +13,7 @@ A boolean feature, must have 3 states selectable by the user: - `Default` (NVDA developer recommendation) This allows a choice between the following use-cases to be made at any point in time: -- **Explicitly opt-in** to the feature, regardless of the default behavior. +- **Explicitly opt-in** to the feature, regardless of the default behavior. An early adopter may choose to do this to test the feature and provide feedback. - **Explicitly opt-out** of the feature, regardless of the default behavior. A user may find the pre-existing behavior acceptable, and wants the maximum delay to adopt the new feature. diff --git a/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md b/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md index c8e3eb6225a..95053e07b19 100644 --- a/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md +++ b/projectDocs/dev/githubPullRequestTemplateExplanationAndExamples.md @@ -14,12 +14,12 @@ which points to this wiki page, it can be left in place and will not appear once Feel free to delete it, i.e. all text up to and including `-->`. ### Link to issue number: -Please include the issue number here, including information on how this pull request is related to +Please include the issue number here, including information on how this pull request is related to it. This helps us to keep the information linked together. If this is a minor/trivial change an issue does not need to be created. If in doubt, please create one. -Note that Github +Note that Github [allows you to automatically close issues using keywords](https://help.github.com/en/articles/closing-issues-using-keywords). For example, when writing `closes #7777` or `fixes #4242` in the body of the description, the mentioned issue will automatically be closed when the pull request is merged into the master @@ -53,8 +53,8 @@ More broadly, try to answer the following questions: - Have you ensured testing coverage across all supported operating systems? - Have you considered possible regressions (related features or behaviours that may break)? -Please use this section as an opportunity to try to convince us (and yourself) that your proposed -change should be merged. +Please use this section as an opportunity to try to convince us (and yourself) that your proposed +change should be merged. Often in face to face development it's useful to demonstrate a change, quite often bugs are noticed at this point when the new person asks for some variation in testing approach. diff --git a/projectDocs/dev/selfSignedBuild.md b/projectDocs/dev/selfSignedBuild.md index c302f50d20b..cc774c8eac7 100644 --- a/projectDocs/dev/selfSignedBuild.md +++ b/projectDocs/dev/selfSignedBuild.md @@ -7,7 +7,7 @@ Copies of NVDA signed by a self-signed certificate will not function on systems Following are instructions on how to generate and install a self-signed certificate. This is not supported and should only be attempted by developers who know what they are doing and are aware of the risks. -If the private key is compromised, this poses a serious security risk to your system. +If the private key is compromised, this poses a serious security risk to your system. Do not forget to [remove the certificate](#remove-the-certificate) when you are done testing. diff --git a/projectDocs/issues/githubIssueTemplateExplanationAndExamples.md b/projectDocs/issues/githubIssueTemplateExplanationAndExamples.md index e3f60ee5287..41b22ce33c3 100644 --- a/projectDocs/issues/githubIssueTemplateExplanationAndExamples.md +++ b/projectDocs/issues/githubIssueTemplateExplanationAndExamples.md @@ -4,7 +4,7 @@ This page is meant to serve as an explanation for how to fill out our [Github issue templates](https://github.com/nvaccess/nvda/blob/master/.github/ISSUE_TEMPLATE/). The template uses github markdown, to provide formatting for headings, lists, quotes etc. -If you are not familiar, please take some time to learn about +If you are not familiar, please take some time to learn about [Github markdown](https://guides.github.com/features/mastering-markdown/) **Warning**: In all but exceptional circumstances we require one of these templates to be completed. @@ -40,7 +40,7 @@ remember to attach one. More [instructions are available on the wiki](https://github.com/nvaccess/nvda/wiki/LogFilesAndCrashDumps). If you are getting a crash dump file (nvda_crash.dmp) please also include it. #### Screenshots -While we welcome **images/screenshots** to help explain a problem, be aware that many of the +While we welcome **images/screenshots** to help explain a problem, be aware that many of the developers of NVDA are blind and will greatly appreciate this image being described in text. Most tools allow you to copy text out of them. @@ -224,7 +224,7 @@ Include links to discussion threads if applicable, for example: - https://nvda.groups.io/g/nvda ### Steps to reproduce or illustrate the issue (if applicable) -If possible, provide steps to demonstrate or reproduce the issue. +If possible, provide steps to demonstrate or reproduce the issue. Refer to [Steps to reproduce](#steps-to-reproduce) for more information. If this or the following sections are not applicable, write "N/A." diff --git a/projectDocs/issues/triage.md b/projectDocs/issues/triage.md index 8bb2771d4e5..3e874c201ba 100644 --- a/projectDocs/issues/triage.md +++ b/projectDocs/issues/triage.md @@ -53,7 +53,7 @@ This is the kind of information that might help when investigating the issue fur - an error noise - A log message - If there was an error noise or log message, was there any unexpected behaviour aside from this? For example, did NVDA fail to report something it should have? -- Even if it seems obvious, what should happen instead? +- Even if it seems obvious, what should happen instead? - Its worth clarifying this with the user, it helps to make sure everyone is on the same page, and that we truly understand what the issue is about. - What version of NVDA was being used. Its good to get something like: stable, beta, rc, alpha. But much better to get the exact version of NVDA, retrieved from the NVDA menu by going to "Help" then "About". "alpha-28931,186a8d70" - In which version of NVDA did this work as expected? @@ -183,14 +183,14 @@ Bugs/regressions are given priorities based on an estimate of their severity and - UX inefficient (e.g. double speaking) - Web standard not followed causing app/web authors to require workarounds - `P5` - - Other feature requests affecting a small subset of users + - Other feature requests affecting a small subset of users ## Legacy issues Many older issues do not follow our issue template and have missing information. Often they have conversation spanning years. Summarising this information and opening a new issue filling out the issue template would be extremely useful in triaging these issues. -NV Access migrated tickets from our old issue tracker (Trac) into Github issues. These issues can be identified by having an author of `nvaccessauto`. +NV Access migrated tickets from our old issue tracker (Trac) into Github issues. These issues can be identified by having an author of `nvaccessauto`. ### Missing attachments Some of the migrated issues have comments that indicate an attachment should be available, but it is not. diff --git a/projectDocs/product_vision.md b/projectDocs/product_vision.md index 71363873cf7..2c52aa69098 100644 --- a/projectDocs/product_vision.md +++ b/projectDocs/product_vision.md @@ -1,7 +1,7 @@ ## Product Vision A world where blind and vision impaired people can independently and fully interact with the Windows Operating System and popular third party applications, enabling them to participate in and contribute to society. Blind and vision impaired people are empowered to control their own destiny and ensure this vision, through being able to significantly contribute to the technology that makes this possible. -All blind and vision impaired people deserve these rights and opportunities, no matter the language they speak, their geographic location, economic status, or sensory, physical, cognitive, or mental abilities. +All blind and vision impaired people deserve these rights and opportunities, no matter the language they speak, their geographic location, economic status, or sensory, physical, cognitive, or mental abilities. ## Product description NVDA (NonVisual Desktop Access) is software that allows blind and vision impaired people to independently interact with the Windows Operating System and popular third party applications by outputting content in either synthetic speech or via a refreshable Braille Display. @@ -18,10 +18,10 @@ Developed by NV Access in partnership with a dedicated open source community, NV * The vast majority of contributors to the NVDA project are blind or vision impaired, and are users of the product themselves. 3. Multilingual: Ensure that NVDA can be used by people no matter what language they speak: * NVDA provides mechanisms for volunteers to translate user interface messages and documentation. - * Release processes provide time and reminders for volunteers to contribute translations to NVDA. + * Release processes provide time and reminders for volunteers to contribute translations to NVDA. 4. Stability: Ensure NVDA is stable, minimizes freezes, and avoids drastic updates that could disrupt user experience: * NVDA strives to support any breaking changes in Windows or supported popular third party applications before they reach the user. - * NVDA updates should not drastically change or remove pre-existing features or defined behaviour without clearly warning the user first. + * NVDA updates should not drastically change or remove pre-existing features or defined behaviour without clearly warning the user first. * NVDA's code should do its best to recover from application freezes, allowing the user to still interact with the rest of the Operating System. 5. Quality: Ensure NVDA's code is high-quality, safe, and that bugs are caught before reaching a release: * All code is reviewed by at least one other core contributor. @@ -30,19 +30,19 @@ Developed by NV Access in partnership with a dedicated open source community, NV 6. Security: Ensure that NVDA does not place a user at risk of security attacks: * NVDA prioritizes user security, striving to eliminate risks of remote control attacks or data leaks. * A strict process exists to follow a security report from implementation to rollout. - * Critical security fixes are minimized in size and complexity to focus on the exact issue reported, which lessens the chance of other security or instabilities accidentally being introduced. - * NVDA can optionally blank the screen while running, to make sure that another person cannot view personal or sensitive information without the blind or vision impaired user knowing. + * Critical security fixes are minimized in size and complexity to focus on the exact issue reported, which lessens the chance of other security or instabilities accidentally being introduced. + * NVDA can optionally blank the screen while running, to make sure that another person cannot view personal or sensitive information without the blind or vision impaired user knowing. 7. Efficient: Ensure responsiveness to user input, but also energy efficiency where possible: - * Make use of newer more efficient APIs where possible, at the same time falling back to older APIs to ensure functionality on older systems. + * Make use of newer more efficient APIs where possible, at the same time falling back to older APIs to ensure functionality on older systems. * Periodically remove technical debt and refactor code to make code more efficient and understandable, making sure to maintain compatibility with existing scenarios and OS / application versions still supported. 8. Innovative: Strive to push the boundaries of what is possible and to avoid stagnation for both NVDA and its competitors: * Prototype new ideas and make them available through try builds. * Promote the sharing and healthy debate of ideas on developer email lists and GitHub Discussions. 9. Compliance: Ensure app / web developers can rely upon NVDA to make best use of the accessibility they implement: * NVDA strives to comply with all application and web accessibility standards where possible. - * Where there is disagreement or inability to comply with an accessibility standard, clear reasoning and possible practical alternatives are documented. + * Where there is disagreement or inability to comply with an accessibility standard, clear reasoning and possible practical alternatives are documented. * Tools such as the NVDA speech viewer help application and web developers use NVDA to test and verify the accessibility of their products. -10. Collaboration: Ensure that blind and sighted people can collaborate together: +10. Collaboration: Ensure that blind and sighted people can collaborate together: * NVDA can clearly visually highlight the position at which the user is currently reading or navigating, to allow another person to be aware of exactly where the user is on the screen. * The NVDA speech viewer can be used to display the text currently being spoken, so that a sighted person who may have trouble understanding the synthesized speech can follow along. 11. Documentation: Ensure users have the knowledge to fully leverage NVDA's features for productivity in work and everyday life: @@ -61,11 +61,11 @@ Developed by NV Access in partnership with a dedicated open source community, NV * NVDA allows the user to configure attributes of the output such as the voice rate and pitch, punctuation, and what Braille standard is used. * NVDA allows the user to create configuration profiles, so that the user can easily switch configurations depending on the particular task they are performing. 15. Extendable: Ensure that NVDA can be easily enhanced and customized to meet specific user needs and requirements: - * NVDA allows the creation and integration of community created add-ons, providing support for extra speech synthesizers, refreshable Braille displays, visual enhancements for low vision, and more third party applications. + * NVDA allows the creation and integration of community created add-ons, providing support for extra speech synthesizers, refreshable Braille displays, visual enhancements for low vision, and more third party applications. * NVDA allows the user to browse, download and install available add-ons from within NVDA itself. * NVDA provides freedom for add-ons to find innovative solutions by allowing them broad access to NVDA's internals. * NVDA ensures add-ons do not break by postponing API breakages to once per year, announcing these changes many months ahead of time. - * NVDA Protects users from installing an add-on that is incompatible with the current version of NVDA, allowing the user to override this protection if they understand the risk. + * NVDA Protects users from installing an add-on that is incompatible with the current version of NVDA, allowing the user to override this protection if they understand the risk. 16. Utility: NVDA provides solutions for blind and vision impaired people in accessing technology that: * provide utility to a significant proportion of users in day-to-day use. * are a necessity for a small subset of our users, without which NVDA would not be functional for them. diff --git a/projectDocs/translating/readme.md b/projectDocs/translating/readme.md index ff224ae7865..4c4f5cf77ae 100644 --- a/projectDocs/translating/readme.md +++ b/projectDocs/translating/readme.md @@ -8,7 +8,7 @@ There are several tasks to be done, and this document hopes to give you an overv Translators should subscribe to the [NVDA translations mailing list](https://groups.io/g/nvda-translations) hosted at Groups.IO. -It is an English low traffic list devoted to the discussion of translation. +It is an English low traffic list devoted to the discussion of translation. Important messages that relate to translators will also be sent here, e.g. before official NVDA releases, to remind translators to make sure their localization is up to date. ## Important Dates @@ -44,7 +44,7 @@ Read [Files to be Localized](#files-to-be-localized) to learn the translation fo You should contact the existing maintainer of your language, and discuss your suggestions and changes. Together you should be able to agree on the best translation and terms to be used, and the necessary changes can be made. -You can send an email to the translation mailing list to find out the correct person. +You can send an email to the translation mailing list to find out the correct person. If your language is no longer maintained, you can request to be the new maintainer for the language via the [NVDA translations mailing list](https://groups.io/g/nvda-translations). diff --git a/security.md b/security.md index 47586360e16..7d1ff7ac2a2 100644 --- a/security.md +++ b/security.md @@ -6,7 +6,7 @@ Please use [our advisory template](./projectDocs/issues/securityAdvisoryTemplate Alternatively, please report security issues via an email to [info@nvaccess.org](mailto:info@nvaccess.org). You should receive an acknowledgement in the advisory or via email response within 3 business days. -If for some reason you do not, please follow up via email to ensure we received your original message. +If for some reason you do not, please follow up via email to ensure we received your original message. Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue. This information will help us triage your report more quickly. @@ -61,4 +61,3 @@ As details of the vulnerability will be available in the code repository, immedi * P1 (Critical): Immediate attention from core developers and/or the Security Advisory Group. Other development tasks may be temporarily deprioritised. * P2 (High): Dedicated resources will be allocated, with prioritisation based on severity and available development bandwidth. - diff --git a/source/UIAHandler/_remoteOps/readme.md b/source/UIAHandler/_remoteOps/readme.md index 90def0ec1f6..9558dda0637 100644 --- a/source/UIAHandler/_remoteOps/readme.md +++ b/source/UIAHandler/_remoteOps/readme.md @@ -25,12 +25,12 @@ def code(ra: RemoteAPI): element = ra.newElement(focusElement) # Create a new array to hold the names we collect. names = ra.newArray() - # Declare a while loop that will walk up the ancestors and collect the names. + # Declare a while loop that will walk up the ancestors and collect the names. with ra.whileBlock(lambda: element.isNull().inverse()): # Fetch the name property of this element and store it in the array. name = element.getPropertyValue(UIA.UIA_NamePropertyId) names.append(name) - # Fetch the element's parent and point element to it. + # Fetch the element's parent and point element to it. parent = element.getParentElement() element.set(parent) # Now back outside the while loop. @@ -101,7 +101,7 @@ This will be covered more in further sections about control flow. But the most important thing to remember here is that you should avoid using any of Python's own control flow (such as if or while, as it most likely will not do what you expected). The remote API has all the control flow you need, such as ifBlock, elseBlock, whileBlock, tryBlock, again covered in later sections. -### Method arguments +### Method arguments When providing arguments to methods, you can use remote values previously declared in the operation, or you can use literal Python values. When using literal Python values, these will be automatically remoted as special constant values for you. For example: @@ -248,7 +248,7 @@ element.set(parent) This is useful when walking the element tree in a loop. ### UI Automation text ranges -#### Declaring a text range +#### Declaring a text range To create a new remote text range, call `ra.newTextRange`, giving it an existing IUIAutomationTextRange comtypes pointer as its argument: ```py textRange = ra.newElement(UIATextRange) @@ -300,10 +300,10 @@ with ra.whileBlock(lambda: counter < 20): # If it fails, break out of the loop. with ra.ifBlock(logicalTempRange.end.moveByUnit(TextUnit_Word, 1) == 0): ra.breakLoop() - # If our temp range has passed the end of the original text range, break out of the loop. + # If our temp range has passed the end of the original text range, break out of the loop. with ra.ifBlock(logicalTempRange.end > logicalTextRange.end): ra.breakLoop() - # collect the text and add it to the words array. + # collect the text and add it to the words array. text = logicalTempRange.textRange.getText(-1) words.append(text) # collapse the range to the end. @@ -349,7 +349,7 @@ with ra.whileBlock(lambda: counter < 5): `ra.breakLoop` and `ra.continueLoop` methods can be called within the loop body to break or continue respectively. Please note that the condition of the while loop must be placed in a lambda as it needs to be fully evaluated within the top of the loop. -If this was not done, the instructions that produced the final boolean condition would appear before the loop and never get re-run on subsequent iterations. +If this was not done, the instructions that produced the final boolean condition would appear before the loop and never get re-run on subsequent iterations. #### try-catch If an action causes an error, it is possible to catch the error by placing those actions in a `with` statement using the `ra.tryBlock` method. @@ -453,7 +453,7 @@ Although the `for` loop will see each yielded value separately, they will only p ## Debugging It can be tricky to debug a remote operation as it executes in the remote provider. Therefore the library contains several features which can help. - + ### Dumping instructions The library can dump all the instructions to NVDA's log each time an operation is built, by setting the Operation's `enableCompiletimeLogging` keyword argument to True. Even if left as False, instructions will still be automatically dumped to NVDA's log if there is an uncaught error while executing, or the instruction limit is reached and it has run out of tries. @@ -463,7 +463,7 @@ counter = ra.newInt(0, static=True) with ra.whileBlock(lambda: counter < 20000): with ra.ifBlock((counter % 1000) == 0): ra.Yield(counter) - counter += 1 + counter += 1 ``` And now the instruction dump: @@ -521,7 +521,7 @@ main: --- End -- ``` -Looking at the dump we can see the library stores instructions in three specific sections: +Looking at the dump we can see the library stores instructions in three specific sections: * `static`: for initializing static instructions. this section is replaced before each execution. * `const`: This section holds values which have been automatically remoted, and are used through out the rest of the instructions. * `main`: the instructions implementing the main logic of the operation. @@ -543,13 +543,13 @@ It takes one or more literal strings and or remote values, and concatinates them For remote values that are not strings, `logRuntimeMessage` uses the remote value's `stringify` method to produce a string representation of the value. After the operation is executed, the remote log is marshalled back and dumped to NvDA's log, thereby giving the ability to trace what is happening during the execution. -Though be aware that as remote logging itself involves creating and manipulating remote values, then the number of instructions can change quite significantly with remote logging enabled. +Though be aware that as remote logging itself involves creating and manipulating remote values, then the number of instructions can change quite significantly with remote logging enabled. ### Local mode When unit testing this library, or in a scenario where remote operations is unavailable but you want to use the exact same algorithm but locally, you can set the Operation's `localMode` keyword argument to True. This causes all instructions to be executed locally, rather than in a remote provider. This will of course be significantly slower, as every instruction that manipulates an element or text range will be itself one cross-process call. -However, it is a useful means of testing and debugging, and much care has been taken to ensure that the results and side-effects are identical to executing it remotely. +However, it is a useful means of testing and debugging, and much care has been taken to ensure that the results and side-effects are identical to executing it remotely. This differs some what from Microsoft's original remote operations library which implemented its local mode so that instructions were executed locally at build time, and executing did nothing. This library produces instructions just as it would remotely, but it is these low-level instructions that are executed locally at execution time, following all the same rules and limitations that executing remotely would. diff --git a/source/comInterfaces/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py b/source/comInterfaces/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py index 828b204e79e..d252e46ca62 100644 --- a/source/comInterfaces/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py +++ b/source/comInterfaces/_944DE083_8FB8_45CF_BCB7_C477ACB2F897_0_1_0.py @@ -73,7 +73,7 @@ class IUIAutomationElement(comtypes.gen._00020430_0000_0000_C000_000000000046_0_ # class IUIAutomationTextEditTextChangedEventHandler_Impl(object): # def HandleTextEditTextChangedEvent(self, sender, TextEditChangeType, eventStrings): # '-no docstring-' -# #return +# #return # # values for enumeration 'StructureChangeType' StructureChangeType_ChildAdded = 0 @@ -195,7 +195,7 @@ class IUIAutomationFocusChangedEventHandler(comtypes.gen._00020430_0000_0000_C00 # class IUIAutomationFocusChangedEventHandler_Impl(object): # def HandleFocusChangedEvent(self, sender): # '-no docstring-' -# #return +# #return # UIA_Transform2CanZoomPropertyId = 30133 # Constant c_int @@ -311,7 +311,7 @@ class UiaChangeInfo(Structure): # class IUIAutomationChangesEventHandler_Impl(object): # def HandleChangesEvent(self, sender, uiaChanges, changesCount): # '-no docstring-' -# #return +# #return # UIA_IsTextPattern2AvailablePropertyId = 30119 # Constant c_int UIA_StylesExtendedPropertiesPropertyId = 30126 # Constant c_int @@ -565,7 +565,7 @@ class IUIAutomationNotificationEventHandler(comtypes.gen._00020430_0000_0000_C00 # class IUIAutomationNotificationEventHandler_Impl(object): # def HandleNotificationEvent(self, sender, NotificationKind, NotificationProcessing, displayString, activityId): # '-no docstring-' -# #return +# #return # UIA_Transform2ZoomMinimumPropertyId = 30146 # Constant c_int @@ -665,7 +665,7 @@ class IUIAutomationMultipleViewPattern(comtypes.gen._00020430_0000_0000_C000_000 # # def SetCurrentView(self, view): # '-no docstring-' -# #return +# #return # # @property # def CurrentCurrentView(self): @@ -1089,7 +1089,7 @@ class IUIAutomationTogglePattern(comtypes.gen._00020430_0000_0000_C000_000000000 # class IUIAutomationTogglePattern_Impl(object): # def Toggle(self): # '-no docstring-' -# #return +# #return # # @property # def CurrentToggleState(self): @@ -1339,7 +1339,7 @@ class IAccessible(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IDisp # # def accSelect(self, flagsSelect, varChild): # '-no docstring-' -# #return +# #return # # def accLocation(self, varChild): # '-no docstring-' @@ -1355,7 +1355,7 @@ class IAccessible(comtypes.gen._00020430_0000_0000_C000_000000000046_0_2_0.IDisp # # def accDoDefaultAction(self, varChild): # '-no docstring-' -# #return +# #return # UIA_StrikethroughStyleAttributeId = 40026 # Constant c_int UIA_IsItalicAttributeId = 40014 # Constant c_int @@ -1555,15 +1555,15 @@ class IUIAutomationTransformPattern(comtypes.gen._00020430_0000_0000_C000_000000 # class IUIAutomationTransformPattern_Impl(object): # def Move(self, x, y): # '-no docstring-' -# #return +# #return # # def Resize(self, width, height): # '-no docstring-' -# #return +# #return # # def Rotate(self, degrees): # '-no docstring-' -# #return +# #return # # @property # def CurrentCanMove(self): @@ -2253,43 +2253,43 @@ class IUIAutomationProxyFactoryMapping(comtypes.gen._00020430_0000_0000_C000_000 # # def AddAutomationEventHandler(self, eventId, element, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveAutomationEventHandler(self, eventId, element, handler): # '-no docstring-' -# #return +# #return # # def AddPropertyChangedEventHandlerNativeArray(self, element, scope, cacheRequest, handler, propertyArray, propertyCount): # '-no docstring-' -# #return +# #return # # def AddPropertyChangedEventHandler(self, element, scope, cacheRequest, handler, propertyArray): # '-no docstring-' -# #return +# #return # # def RemovePropertyChangedEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # # def AddStructureChangedEventHandler(self, element, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveStructureChangedEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # # def AddFocusChangedEventHandler(self, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveFocusChangedEventHandler(self, handler): # '-no docstring-' -# #return +# #return # # def RemoveAllEventHandlers(self): # '-no docstring-' -# #return +# #return # # def IntNativeArrayToSafeArray(self, array, arrayCount): # '-no docstring-' @@ -2522,7 +2522,7 @@ class IUIAutomationValuePattern(comtypes.gen._00020430_0000_0000_C000_0000000000 # class IUIAutomationValuePattern_Impl(object): # def SetValue(self, val): # '-no docstring-' -# #return +# #return # # @property # def CurrentValue(self): @@ -2723,27 +2723,27 @@ class IUIAutomationSpreadsheetItemPattern(comtypes.gen._00020430_0000_0000_C000_ # # def SetTable(self, factoryList): # '-no docstring-' -# #return +# #return # # def InsertEntries(self, before, factoryList): # '-no docstring-' -# #return +# #return # # def InsertEntry(self, before, factory): # '-no docstring-' -# #return +# #return # # def RemoveEntry(self, index): # '-no docstring-' -# #return +# #return # # def ClearTable(self): # '-no docstring-' -# #return +# #return # # def RestoreDefaultTable(self): # '-no docstring-' -# #return +# #return # UIA_GridPatternId = 10006 # Constant c_int UIA_ValuePatternId = 10002 # Constant c_int @@ -3336,7 +3336,7 @@ class IUIAutomationElement3(IUIAutomationElement2): # class IUIAutomationElement_Impl(object): # def SetFocus(self): # '-no docstring-' -# #return +# #return # # def GetRuntimeId(self): # '-no docstring-' @@ -3834,7 +3834,7 @@ class IUIAutomationElement3(IUIAutomationElement2): # class IUIAutomationElement3_Impl(object): # def ShowContextMenu(self): # '-no docstring-' -# #return +# #return # # @property # def CurrentIsPeripheral(self): @@ -3896,11 +3896,11 @@ class IUIAutomation4(IUIAutomation3): # class IUIAutomation3_Impl(object): # def AddTextEditTextChangedEventHandler(self, element, scope, TextEditChangeType, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveTextEditTextChangedEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # IUIAutomation4._methods_ = [ @@ -3929,11 +3929,11 @@ class IUIAutomation4(IUIAutomation3): # class IUIAutomation4_Impl(object): # def AddChangesEventHandler(self, element, scope, changeTypes, changesCount, pCacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveChangesEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # UIA_TextPattern2Id = 10024 # Constant c_int UIA_Text_TextSelectionChangedEventId = 20014 # Constant c_int @@ -4195,7 +4195,7 @@ class IUIAutomationWindowPattern(comtypes.gen._00020430_0000_0000_C000_000000000 # class IUIAutomationWindowPattern_Impl(object): # def Close(self): # '-no docstring-' -# #return +# #return # # def WaitForInputIdle(self, milliseconds): # '-no docstring-' @@ -4203,7 +4203,7 @@ class IUIAutomationWindowPattern(comtypes.gen._00020430_0000_0000_C000_000000000 # # def SetWindowVisualState(self, state): # '-no docstring-' -# #return +# #return # # @property # def CurrentCanMaximize(self): @@ -4478,11 +4478,11 @@ class IUIAutomationScrollPattern(comtypes.gen._00020430_0000_0000_C000_000000000 # class IUIAutomationScrollPattern_Impl(object): # def Scroll(self, horizontalAmount, verticalAmount): # '-no docstring-' -# #return +# #return # # def SetScrollPercent(self, horizontalPercent, verticalPercent): # '-no docstring-' -# #return +# #return # # @property # def CurrentHorizontalScrollPercent(self): @@ -4729,11 +4729,11 @@ class IUIAutomationTransformPattern2(IUIAutomationTransformPattern): # class IUIAutomationTransformPattern2_Impl(object): # def Zoom(self, zoomValue): # '-no docstring-' -# #return +# #return # # def ZoomByUnit(self, ZoomUnit): # '-no docstring-' -# #return +# #return # # @property # def CurrentCanZoom(self): @@ -4813,11 +4813,11 @@ class IUIAutomation5(IUIAutomation4): # class IUIAutomation5_Impl(object): # def AddNotificationEventHandler(self, element, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveNotificationEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # UIA_MenuModeEndEventId = 20019 # Constant c_int @@ -4986,7 +4986,7 @@ class IUIAutomationTextRange2(IUIAutomationTextRange): # # def ExpandToEnclosingUnit(self, TextUnit): # '-no docstring-' -# #return +# #return # # def FindAttribute(self, attr, val, backward): # '-no docstring-' @@ -5022,23 +5022,23 @@ class IUIAutomationTextRange2(IUIAutomationTextRange): # # def MoveEndpointByRange(self, srcEndPoint, range, targetEndPoint): # '-no docstring-' -# #return +# #return # # def Select(self): # '-no docstring-' -# #return +# #return # # def AddToSelection(self): # '-no docstring-' -# #return +# #return # # def RemoveFromSelection(self): # '-no docstring-' -# #return +# #return # # def ScrollIntoView(self, alignToTop): # '-no docstring-' -# #return +# #return # # def GetChildren(self): # '-no docstring-' @@ -5054,7 +5054,7 @@ class IUIAutomationTextRange2(IUIAutomationTextRange): # class IUIAutomationTextRange2_Impl(object): # def ShowContextMenu(self): # '-no docstring-' -# #return +# #return # UIA_AnnotationAnnotationTypeIdPropertyId = 30113 # Constant c_int @@ -5149,31 +5149,31 @@ class IUIAutomationActiveTextPositionChangedEventHandler(comtypes.gen._00020430_ # class IUIAutomationEventHandlerGroup_Impl(object): # def AddActiveTextPositionChangedEventHandler(self, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def AddAutomationEventHandler(self, eventId, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def AddChangesEventHandler(self, scope, changeTypes, changesCount, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def AddNotificationEventHandler(self, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def AddPropertyChangedEventHandler(self, scope, cacheRequest, handler, propertyArray, propertyCount): # '-no docstring-' -# #return +# #return # # def AddStructureChangedEventHandler(self, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def AddTextEditTextChangedEventHandler(self, scope, TextEditChangeType, cacheRequest, handler): # '-no docstring-' -# #return +# #return # UIA_CulturePropertyId = 30015 # Constant c_int @@ -5482,7 +5482,7 @@ class IUIAutomationRangeValuePattern(comtypes.gen._00020430_0000_0000_C000_00000 # class IUIAutomationRangeValuePattern_Impl(object): # def SetValue(self, val): # '-no docstring-' -# #return +# #return # # @property # def CurrentValue(self): @@ -5658,7 +5658,7 @@ class IUIAutomationInvokePattern(comtypes.gen._00020430_0000_0000_C000_000000000 # class IUIAutomationInvokePattern_Impl(object): # def Invoke(self): # '-no docstring-' -# #return +# #return # @@ -5703,7 +5703,7 @@ class IUIAutomationDockPattern(comtypes.gen._00020430_0000_0000_C000_00000000004 # class IUIAutomationDockPattern_Impl(object): # def SetDockPosition(self, dockPos): # '-no docstring-' -# #return +# #return # # @property # def CurrentDockPosition(self): @@ -5732,7 +5732,7 @@ class IUIAutomationScrollItemPattern(comtypes.gen._00020430_0000_0000_C000_00000 # class IUIAutomationScrollItemPattern_Impl(object): # def ScrollIntoView(self): # '-no docstring-' -# #return +# #return # @@ -5857,11 +5857,11 @@ class IUIAutomationExpandCollapsePattern(comtypes.gen._00020430_0000_0000_C000_0 # class IUIAutomationExpandCollapsePattern_Impl(object): # def Expand(self): # '-no docstring-' -# #return +# #return # # def Collapse(self): # '-no docstring-' -# #return +# #return # # @property # def CurrentExpandCollapseState(self): @@ -6312,11 +6312,11 @@ class IUIAutomation6(IUIAutomation5): # # def AddEventHandlerGroup(self, element, handlerGroup): # '-no docstring-' -# #return +# #return # # def RemoveEventHandlerGroup(self, element, handlerGroup): # '-no docstring-' -# #return +# #return # # def _get(self): # '-no docstring-' @@ -6334,11 +6334,11 @@ class IUIAutomation6(IUIAutomation5): # # def AddActiveTextPositionChangedEventHandler(self, element, scope, cacheRequest, handler): # '-no docstring-' -# #return +# #return # # def RemoveActiveTextPositionChangedEventHandler(self, element, handler): # '-no docstring-' -# #return +# #return # UIA_IsSpreadsheetPatternAvailablePropertyId = 30128 # Constant c_int UIA_ControllerForPropertyId = 30104 # Constant c_int @@ -6414,7 +6414,7 @@ class IUIAutomationVirtualizedItemPattern(comtypes.gen._00020430_0000_0000_C000_ # class IUIAutomationVirtualizedItemPattern_Impl(object): # def Realize(self): # '-no docstring-' -# #return +# #return # AnnotationType_EditingLockedChange = 60016 # Constant c_int @@ -6697,7 +6697,7 @@ class IUIAutomationElement8(IUIAutomationElement7): # class IUIAutomationEventHandler_Impl(object): # def HandleAutomationEvent(self, sender, eventId): # '-no docstring-' -# #return +# #return # @@ -6752,7 +6752,7 @@ class IUIAutomationElement9(IUIAutomationElement8): # class IUIAutomationPropertyChangedEventHandler_Impl(object): # def HandlePropertyChangedEvent(self, sender, propertyId, newValue): # '-no docstring-' -# #return +# #return # @@ -6813,7 +6813,7 @@ class IRawElementProviderSimple(comtypes.gen._00020430_0000_0000_C000_0000000000 # class IUIAutomationStructureChangedEventHandler_Impl(object): # def HandleStructureChangedEvent(self, sender, changeType, runtimeId): # '-no docstring-' -# #return +# #return # UIA_FlowsToPropertyId = 30106 # Constant c_int @@ -6865,7 +6865,7 @@ class IUIAutomationCustomNavigationPattern(comtypes.gen._00020430_0000_0000_C000 # class IUIAutomationActiveTextPositionChangedEventHandler_Impl(object): # def HandleActiveTextPositionChangedEvent(self, sender, range): # '-no docstring-' -# #return +# #return # # values for enumeration 'ProviderOptions' ProviderOptions_ClientSideProvider = 1 @@ -6977,15 +6977,15 @@ class IUIAutomationSelectionItemPattern(comtypes.gen._00020430_0000_0000_C000_00 # class IUIAutomationSelectionItemPattern_Impl(object): # def Select(self): # '-no docstring-' -# #return +# #return # # def AddToSelection(self): # '-no docstring-' -# #return +# #return # # def RemoveFromSelection(self): # '-no docstring-' -# #return +# #return # # @property # def CurrentIsSelected(self): @@ -7180,15 +7180,15 @@ class IUIAutomationLegacyIAccessiblePattern(comtypes.gen._00020430_0000_0000_C00 # class IUIAutomationLegacyIAccessiblePattern_Impl(object): # def Select(self, flagsSelect): # '-no docstring-' -# #return +# #return # # def DoDefaultAction(self): # '-no docstring-' -# #return +# #return # # def SetValue(self, szValue): # '-no docstring-' -# #return +# #return # # @property # def CurrentChildId(self): @@ -7337,11 +7337,11 @@ class IUIAutomationSynchronizedInputPattern(comtypes.gen._00020430_0000_0000_C00 # class IUIAutomationSynchronizedInputPattern_Impl(object): # def StartListening(self, inputType): # '-no docstring-' -# #return +# #return # # def Cancel(self): # '-no docstring-' -# #return +# #return # UIA_StylesFillPatternColorPropertyId = 30125 # Constant c_int UIA_StylesFillPatternStylePropertyId = 30123 # Constant c_int @@ -7580,7 +7580,7 @@ class IUIAutomationTablePattern(comtypes.gen._00020430_0000_0000_C000_0000000000 # # def SetWinEventsForAutomationEvent(self, eventId, propertyId, winEvents): # '-no docstring-' -# #return +# #return # # def GetWinEventsForAutomationEvent(self, eventId, propertyId): # '-no docstring-' @@ -7736,11 +7736,11 @@ class IUIAutomationBoolCondition(IUIAutomationCondition): # class IUIAutomationCacheRequest_Impl(object): # def AddProperty(self, propertyId): # '-no docstring-' -# #return +# #return # # def AddPattern(self, patternId): # '-no docstring-' -# #return +# #return # # def Clone(self): # '-no docstring-' @@ -8178,4 +8178,3 @@ class CUIAutomation(CoClass): ] _check_version('1.2.0', 1691570609.765831) - diff --git a/source/comInterfaces/readme.md b/source/comInterfaces/readme.md index 3a56c0ba663..606b2079018 100644 --- a/source/comInterfaces/readme.md +++ b/source/comInterfaces/readme.md @@ -1,5 +1,5 @@ The comInterfaces package is generated via SCons. -The logic for this is in `comInterfaces_sconscript`, which uses `comtypes.gen` to read `*.tlb` +The logic for this is in `comInterfaces_sconscript`, which uses `comtypes.gen` to read `*.tlb` files or via interface IDs. The interface files have an ID named file (a GUID, followed by a version number) as well as a diff --git a/source/fonts/readme.md b/source/fonts/readme.md index 889d9b55a7f..6d01ccdfbe4 100644 --- a/source/fonts/readme.md +++ b/source/fonts/readme.md @@ -17,4 +17,3 @@ The dot positions are based on the final 8 dot braille character, ⣿ (all pins The free outline font editor, George Williams's FontForge https://github.com/fontforge/fontforge/releases is used for editing the fonts via the `*.sfd` file. - diff --git a/tests/system/readme.md b/tests/system/readme.md index b7c7474e47b..4e16ddc631e 100644 --- a/tests/system/readme.md +++ b/tests/system/readme.md @@ -4,7 +4,7 @@ This build system uses the Robot test framework to execute the system tests. Dependencies such as Robot are automatically installed for you when NVDA's build system Python virtual environment is set up, when running any of the high-level commands such as runsystemtests.bat, thus a developer should usually not have to worry about dependencies. - + ### Running the tests You can run the tests with `runsystemtests.bat --include `. @@ -123,15 +123,15 @@ NVDA is started with the `-c` option to specify this profile directory to be use ### Logs Both Robot Framework and NVDA logs are captured in the `testOutput` directory in the repo root. -NVDA logs (NVDA log, stdOut, and stdErr for each test) are under the `nvdaTestRunLogs` directory. +NVDA logs (NVDA log, stdOut, and stdErr for each test) are under the `nvdaTestRunLogs` directory. The log files are named by suite and test name. ### Comparing changes to NVDA Settings -`.\runsettingsdiff.bat` is a tool used to compare the settings dialog by reading text and generating screenshots for comparison. The default behaviour is to run using the source code and output to `.\tests\system\settingsCache\source`. +`.\runsettingsdiff.bat` is a tool used to compare the settings dialog by reading text and generating screenshots for comparison. The default behaviour is to run using the source code and output to `.\tests\system\settingsCache\source`. #### Usage -To check for unreleased changes to the settings dialogs, one can use this tool to compare against two copies of NVDA. +To check for unreleased changes to the settings dialogs, one can use this tool to compare against two copies of NVDA. The following arguments should be used with the script. @@ -140,7 +140,7 @@ Default arguments used are stored in `.\tests\system\guiDiff.robot` - `--variable whichNVDA:[installed|source]` to decide where to run NVDA from - `--variable cacheFolder:[filePath]` screenshots and text files of each settings panel are generated in `$cacheFolder\$currentVersion` - `--variable currentVersion:[nvdaVersion]` where `[nvdaVersion]` is used to name the generated screenshot and cache folder -- `--variable compareVersion:[nvdaVersion]` using a `$nvdaVersion` that this script has already been run against, run the system tests and fail if there are differences between the read text. This generates a multiline diff. +- `--variable compareVersion:[nvdaVersion]` using a `$nvdaVersion` that this script has already been run against, run the system tests and fail if there are differences between the read text. This generates a multiline diff. #### Example usage to compare settings between NVDA 2020.4 and the current source diff --git a/user_docs/en/changes.md b/user_docs/en/changes.md index 1d7dd5f3188..26be846e0b7 100644 --- a/user_docs/en/changes.md +++ b/user_docs/en/changes.md @@ -444,7 +444,7 @@ Please open a GitHub issue if your Add-on has an issue with updating to the new * configobj to 5.1.0dev commit `e2ba4457c4651fa54f8d59d8dcdd3da950e956b8`. (#15544) * Comtypes to 1.2.0. (#15513, @codeofdusk) * Flake8 to 4.0.1. (#15636, @lukaszgo1) - * py2exe to 0.13.0.1dev commit `4e7b2b2c60face592e67cb1bc935172a20fa371d`. (#15544) + * py2exe to 0.13.0.1dev commit `4e7b2b2c60face592e67cb1bc935172a20fa371d`. (#15544) * robotframework to 6.1.1. (#15544) * SCons to 4.5.2. (#15529, @LeonarddeR) * sphinx to 7.2.6. (#15544) @@ -787,7 +787,7 @@ eSpeak-NG, LibLouis braille translator, and Unicode CLDR have been updated. * For symbols which do not have a symbol description in the current locale, the default English symbol level will be used. (#14558, #14417) * It is now possible to use the backslash character in the replacement field of a dictionaries entry, when the type is not set to regular expression. (#14556) * In Windows 10 and 11 Calculator, a portable copy of NVDA will no longer do nothing or play error tones when entering expressions in standard calculator in compact overlay mode. (#14679) -* NVDA again recovers from many more situations such as applications that stop responding which previously caused it to freeze completely. (#14759) +* NVDA again recovers from many more situations such as applications that stop responding which previously caused it to freeze completely. (#14759) * When forcing UIA support with certain terminal and consoles, a bug is fixed which caused a freeze and the log file to be spammed. (#14689) * NVDA will no longer refuse to save the configuration after a configuration reset. (#13187) * When running a temporary version from the launcher, NVDA will not mislead users into thinking they can save the configuration. (#14914) @@ -1399,7 +1399,7 @@ This release includes major improvements to UIA support with MS Office. For Microsoft Office 16.0.15000 and higher on Windows 11, NVDA will use UI Automation to access Microsoft Word documents by default. This provides a significant performance improvement over the old Object model access. -There are improvements to braille display drivers including Seika Notetaker, Papenmeier and HID Braille. +There are improvements to braille display drivers including Seika Notetaker, Papenmeier and HID Braille. There are also various Windows 11 bug fixes, for apps such as Calculator, Console, Terminal, Mail and Emoji Panel. eSpeak-NG and LibLouis have been updated, adding new Japanese, German and Catalan tables. @@ -1415,7 +1415,7 @@ Note: * The new `--lang` command line parameter allows overriding the configured NVDA language. (#10044) * NVDA now warns about command line parameters which are unknown and not used by any add-ons. (#12795) * In Microsoft Word accessed via UI Automation, NVDA will now make use of mathPlayer to read and navigate Office math equations. (#12946) - * For this to work, you must be running Microsoft Word 365/2016 build 14326 or later. + * For this to work, you must be running Microsoft Word 365/2016 build 14326 or later. * MathType equations must also be manually converted to Office Math by selecting each, opening the context menu, choosing Equation options, Convert to Office Math. * Reporting of "has details" and the associated command to summarize the details relation have been updated to work in focus mode. (#13106) * Seika Notetaker can now be auto-detected when connected via USB and Bluetooth. (#13191, #13142) @@ -1427,7 +1427,7 @@ Note: * Added support for Windows 11 Calculator. (#13212) * In Microsoft Word with UI Automation enabled on Windows 11, line numbers and section numbers can now be reported. (#13283, #13515) * For Microsoft Office 16.0.15000 and higher on Windows 11, NVDA will use UI Automation to access Microsoft Word documents by default, providing a significant performance improvement over the old Object model access. (#13437) - * This includes documents in Microsoft Word itself, and also the message reader and composer in Microsoft Outlook. + * This includes documents in Microsoft Word itself, and also the message reader and composer in Microsoft Outlook. ### Changes @@ -1706,7 +1706,7 @@ For security purposes, when using a new version of Windows, get visual confirmat * Experimental support for ARIA annotations: * adds a command to read a summary of details of an object with aria-details. (#12364) - * adds an option in advanced preferences to report if an object has details in browse mode. (#12439) + * adds an option in advanced preferences to report if an object has details in browse mode. (#12439) * In Windows 10 Version 1909 and later (including Windows 11), NVDA will announce suggestion count when performing searches in File Explorer. (#10341, #12628) * In Microsoft Word, NVDA now announces the result of indent and hanging indent shortcuts when executed. (#6269) @@ -1966,7 +1966,7 @@ Plus many other important bug fixes and improvements. * NVDA no longer fails to read items in list views within a 64-bit application such as Tortoise SVN. (#8175) * ARIA treegrids are now exposed as normal tables in browse mode in both Firefox and Chrome. (#9715) * A reverse search can now be initiated with 'find previous' via NVDA+shift+F3 (#11770) -* An NVDA script is no longer treated as being repeated if an unrelated key press happens in between the two executions of the script. (#11388) +* An NVDA script is no longer treated as being repeated if an unrelated key press happens in between the two executions of the script. (#11388) * Strong and emphasis tags in Internet Explorer can again be suppressed from being reported by turning off Report Emphasis in NVDA's Document Formatting settings. (#11808) * A freeze of several seconds experienced by a small amount of users when arrowing between cells in Excel should no longer occur. (#11818) * In Microsoft Teams builds with version numbers like 1.3.00.28xxx, NVDA no longer fails reading messages in chats or Teams channels due to an incorrectly focused menu. (#11821) @@ -2196,7 +2196,7 @@ Although these changes do break compatibility with older NVDA add-ons, the upgra * The user guide now describes how to use NVDA in the Windows Console. (#9957) * Running nvda.exe now defaults to replacing an already running copy of NVDA. The -r|--replace command line parameter is still accepted, but ignored. (#8320) * On Windows 8 and later, NVDA will now report product name and version information for hosted apps such as apps downloaded from Microsoft Store using information provided by the app. (#4259, #10108) -* When toggling track changes on and off with the keyboard in Microsoft Word, NVDA will announce the state of the setting. (#942) +* When toggling track changes on and off with the keyboard in Microsoft Word, NVDA will announce the state of the setting. (#942) * The NVDA version number is now logged as the first message in the log. This occurs even if logging has been disabled from the GUI. (#9803) * The settings dialog no longer allows for changing the configured log level if it has been overridden from the command line. (#10209) * In Microsoft Word, NVDA now announces the display state of non printable characters when pressing the toggle shortcut Ctrl+Shift+8 . (#10241) @@ -2305,7 +2305,7 @@ Although these changes do break compatibility with older NVDA add-ons, the upgra * The UNIT_CONTROLFIELD and UNIT_FORMATFIELD constants have been moved from virtualBuffers.VirtualBufferTextInfo to the textInfos package. (#10396) * For every entry in the NVDA log, information about the originating thread is now included. (#10259) * UIA TextInfo objects can now be moved/expanded by the page, story and formatField text units. (#10396) -* External modules (appModules and globalPlugins) are now less likely to be able to break the creation of NVDAObjects. +* External modules (appModules and globalPlugins) are now less likely to be able to break the creation of NVDAObjects. * Exceptions caused by the "chooseNVDAObjectOverlayClasses" and "event_NVDAObject_init" methods are now properly caught and logged. * The aria.htmlNodeNameToAriaLandmarkRoles dictionary has been renamed to aria.htmlNodeNameToAriaRoles. It now also contains roles that aren't landmarks. * scriptHandler.isCurrentScript has been removed due to lack of use. There is no replacement. (#8677) @@ -2315,8 +2315,8 @@ Although these changes do break compatibility with older NVDA add-ons, the upgra This is a minor release to fix several crashes present in 2019.2. Fixes include: * Addressed several crashes in Gmail seen in both Firefox and Chrome when interacting with particular popup menus such as when creating filters or changing certain Gmail settings. (#10175, #9402, #8924) -* In Windows 7, NVDA no longer causes Windows Explorer to crash when the mouse is used in the start menu. (#9435) -* Windows Explorer on Windows 7 no longer crashes when accessing metadata edit fields. (#5337) +* In Windows 7, NVDA no longer causes Windows Explorer to crash when the mouse is used in the start menu. (#9435) +* Windows Explorer on Windows 7 no longer crashes when accessing metadata edit fields. (#5337) * NVDA no longer freezes when interacting with images with a base64 URI in Mozilla Firefox or Google Chrome. (#10227) ## 2019.2 @@ -2325,8 +2325,8 @@ Highlights of this release include auto detection of Freedom Scientific braille ### New Features -* NVDA's Miranda NG support works with newer versions of the client. (#9053) -* You can now disable browse mode by default by disabling the new "Enable browse mode on page load" option in NVDA's browse mode settings. (#8716) +* NVDA's Miranda NG support works with newer versions of the client. (#9053) +* You can now disable browse mode by default by disabling the new "Enable browse mode on page load" option in NVDA's browse mode settings. (#8716) * Note that when this option is disabled, you can still enable browse mode manually by pressing NVDA+space. * You can now filter symbols in the punctuation/symbol pronunciation dialog, similar to how filtering works in the elements list and input gestures dialog. (#5761) * A command has been added to change the mouse text unit resolution (how much text will be spoken when the mouse moves), it has not been assigned a default gesture. (#9056) @@ -2336,7 +2336,7 @@ Highlights of this release include auto detection of Freedom Scientific braille * The gesture must be configured in the "Input gestures" dialog. * In Eclipse, added support for autocompletion in code editor. (#5667) * Additionally, Javadoc information can be read from the editor when it is present by using NVDA+d. -* Added an experimental option to the Advanced Settings panel that allows you to stop the system focus from following the browse mode cursor (Automatically set system focus to focusable elements). (#2039) Although this may not be suitable to turn off for all websites, this may fix: +* Added an experimental option to the Advanced Settings panel that allows you to stop the system focus from following the browse mode cursor (Automatically set system focus to focusable elements). (#2039) Although this may not be suitable to turn off for all websites, this may fix: * Rubber band effect: NVDA sporadically undoes the last browse mode keystroke by jumping to the previous location. * Edit boxes steal system focus when arrowing down through them on some websites. * Browse mode keystrokes are slow to respond. @@ -2408,7 +2408,7 @@ This point release fixes the following bugs: Highlights of this release include performance improvements when accessing both Microsoft word and Excel, stability and security improvements such as support for add-ons with version compatibility information, and many other bug fixes. -Please note that starting from this release of NVDA, custom appModules, globalPlugins, braille display drivers and synth drivers will no longer be automatically loaded from your NVDA user configuration directory. +Please note that starting from this release of NVDA, custom appModules, globalPlugins, braille display drivers and synth drivers will no longer be automatically loaded from your NVDA user configuration directory. Rather these should be installed as part of an NVDA add-on. For those developing code for an add-on, code for testing can be placed in a new developer scratchpad directory in the NVDA user configuration directory, if the Developer scratchpad option is turned on in NVDA's new Advanced settings panel. These changes are necessary to better ensure compatibility of custom code, so that NVDA does not break when this code becomes incompatible with newer releases. Please refer to the list of changes further down for more details on this and how add-ons are now better versioned. @@ -2416,7 +2416,7 @@ Please refer to the list of changes further down for more details on this and ho ### New Features * New braille tables: Afrikaans, Arabic 8 dot computer braille, Arabic grade 2, Spanish grade 2. (#4435, #9186) -* Added an option to NVDA's mouse settings to make NVDA handle situations where the mouse is controlled by another application. (#8452) +* Added an option to NVDA's mouse settings to make NVDA handle situations where the mouse is controlled by another application. (#8452) * This will allow NVDA to track the mouse when a system is controlled remotely using TeamViewer or other remote control software. * Added the `--enable-start-on-logon` command line parameter to allow configuring whether silent installations of NVDA set NVDA to start at Windows logon or not. Specify true to start at logon or false to not start at logon. If the --enable-start-on-logon argument is not specified at all then NVDA will default to starting at logon, unless it was already configured not to by a previous installation. (#8574) * It is possible to turn NVDA's logging features off by setting logging level to "disabled" from General settings panel. (#8516) @@ -2466,7 +2466,7 @@ Please refer to the list of changes further down for more details on this and ho * In Windows 10 October 2018 Update and later, when opening cloud clipboard history with clipboard empty, NVDA will announce clipboard status. (#9103) * In Windows 10 October 2018 Update and later, when searching for emojis in emoji panel, NVDA will announce top search result. (#9105) * NVDA no longer freezes in the main window of Oracle VirtualBox 5.2 and above. (#9202) -* Responsiveness in Microsoft Word when navigating by line, paragraph or table cell may be significantly improved in some documents. A reminder that for best performance, set Microsoft Word to Draft view with alt+w,e after opening a document. (#9217) +* Responsiveness in Microsoft Word when navigating by line, paragraph or table cell may be significantly improved in some documents. A reminder that for best performance, set Microsoft Word to Draft view with alt+w,e after opening a document. (#9217) * In Mozilla Firefox and Google Chrome, empty alerts are no longer reported. (#5657) * Significant performance improvements when navigating cells in Microsoft Excel, particularly when the spreadsheet contains comments and or validation dropdown lists. (#7348) * It should be no longer necessary to turn off in-cell editing in Microsoft Excel's options to access the cell edit control with NVDA in Excel 2016/365. (#8146). @@ -2522,7 +2522,7 @@ Highlights of this release include performance improvements in recent Mozilla Fi * NVDA no longer fails to track focus in File Explorer and other applications using UI Automation when another app is busy (such as batch processing audio). (#7345) * In ARIA menus on the web, the Escape key will now be passed through to the menu and no longer turn off focus mode unconditionally. (#3215) * In the new Gmail web interface, when using quick navigation inside messages while reading them, the entire body of the message is no longer reported after the element to which you just navigated. (#8887) -* After updating NVDA, Browsers such as Firefox and google Chrome should no longer crash, and browse mode should continue to correctly reflect updates to any currently loaded documents. (#7641) +* After updating NVDA, Browsers such as Firefox and google Chrome should no longer crash, and browse mode should continue to correctly reflect updates to any currently loaded documents. (#7641) * NVDA no longer reports clickable multiple times in a row when navigating clickable content in Browse Mode. (#7430) * Gestures performed on baum Vario 40 braille displays will no longer fail to execute. (#8894) * In Google Slides with Mozilla Firefox, NVDA no longer reports selected text on every control with focus. (#8964) @@ -2636,9 +2636,9 @@ Highlights of this release include Support for tables in Kindle for PC, support * In Windows 10 Fall Creators Update and later, NVDA can announce notifications from apps such as Calculator and Windows Store. (#7984) * New braille translation tables: Lithuanian 8 dot, Ukrainian, Mongolian grade 2. (#7839) * Added a script to report formatting information for the text under a specific braille cell. (#7106) -* When updating NVDA, it is now possible to postpone the installation of the update to a later moment. (#4263) +* When updating NVDA, it is now possible to postpone the installation of the update to a later moment. (#4263) * New languages: Mongolian, Swiss German. -* You can now toggle control, shift, alt, windows and NVDA from your braille keyboard and combine these modifiers with braille input (e.g. press control+s). (#7306) +* You can now toggle control, shift, alt, windows and NVDA from your braille keyboard and combine these modifiers with braille input (e.g. press control+s). (#7306) * You can assign these new modifier toggles using the commands found under Emulated system keyboard keys in the Input gestures dialog. * Restored support for Handy Tech Braillino and Modular (with old firmware) displays. (#8016) * Date and time for supported Handy Tech devices (such as Active Braille and Active Star) will now automatically be synchronized by NVDA when out of sync more than five seconds. (#8016) @@ -2688,7 +2688,7 @@ Highlights of this release include Support for tables in Kindle for PC, support ## 2018.1.1 -This is a special release of NVDA which addresses a bug in the Onecore Windows Speech synthesizer driver, which was causing it to speak with a higher pitch and speed in Windows 10 Redstone 4 (1803). (#8082) +This is a special release of NVDA which addresses a bug in the Onecore Windows Speech synthesizer driver, which was causing it to speak with a higher pitch and speed in Windows 10 Redstone 4 (1803). (#8082) ## 2018.1 @@ -2703,18 +2703,18 @@ Highlights of this release include support for charts in Microsoft word and Pow * New language: Kyrgyz. * Added support for VitalSource Bookshelf. (#7155) * Added support for the Optelec protocol converter, a device that allows one to use Braille Voyager and Satellite displays using the ALVA BC6 communication protocol. (#6731) -* It is now possible to use braille input with an ALVA 640 Comfort braille display. (#7733) +* It is now possible to use braille input with an ALVA 640 Comfort braille display. (#7733) * NVDA's braille input functionality can be used with these as well as other BC6 displays with firmware 3.0.0 and above. * Early support for Google Sheets with Braille mode enabled. (#7935) * Support for Eurobraille Esys, Esytime and Iris braille displays. (#7488) ### Changes -* The HIMS Braille Sense/Braille EDGE/Smart Beetle and Hims Sync Braille display drivers have been replaced by one driver. The new driver will automatically be activated for former syncBraille driver users. (#7459) +* The HIMS Braille Sense/Braille EDGE/Smart Beetle and Hims Sync Braille display drivers have been replaced by one driver. The new driver will automatically be activated for former syncBraille driver users. (#7459) * Some keys , notably scroll keys, have been reassigned to follow the conventions used by Hims products. Consult the user guide for more details. * When typing with the on-screen keyboard via touch interaction, by default you now need to double tap each key the same way you would activate any other control. (#7309) * To use the existing "touch typing" mode where simply lifting your finger off the key is enough to activate it, Enable this option in the new Touch Interaction settings dialog found in the Preferences menu. -* It is no longer necessary to explicitly tether braille to focus or review, as this will happen automatically by default. (#2385) +* It is no longer necessary to explicitly tether braille to focus or review, as this will happen automatically by default. (#2385) * Note that automatic tethering to review will only occur when using a review cursor or object navigation command. Scrolling will not activate this new behavior. ### Bug Fixes @@ -2738,7 +2738,7 @@ Highlights of this release include support for charts in Microsoft word and Pow ### Changes for developers -* Added a hidden boolean flag to the braille section in the configuration: "outputPass1Only". (#7301, #7693, #7702) +* Added a hidden boolean flag to the braille section in the configuration: "outputPass1Only". (#7301, #7693, #7702) * This flag defaults to true. If false, liblouis multi pass rules will be used for braille output. * A new dictionary (braille.RENAMED_DRIVERS) has been added to allow for smooth transition for users using drivers that have been superseded by others. (#7459) * Updated comtypes package to 1.1.3. (#7831) @@ -2808,9 +2808,9 @@ Please note that this version of NVDA no longer supports Windows XP or Windows V * "scons tests" now checks that translatable strings have translator comments. You can also run this alone with "scons checkPot". (#7492) * There is now a new extensionPoints module which provides a generic framework to enable code extensibility at specific points in the code. This allows interested parties to register to be notified when some action occurs (extensionPoints.Action), to modify a specific kind of data (extensionPoints.Filter) or to participate in deciding whether something will be done (extensionPoints.Decider). (#3393) * You can now register to be notified about configuration profile switches via the config.configProfileSwitched Action. (#3393) -* Braille display gestures that emulate system keyboard key modifiers (such as control and alt) can now be combined with other emulated system keyboard keys without explicit definition. (#6213) +* Braille display gestures that emulate system keyboard key modifiers (such as control and alt) can now be combined with other emulated system keyboard keys without explicit definition. (#6213) * For example, if you have a key on your display bound to the alt key and another display key to downArrow, combining these keys will result in the emulation of alt+downArrow. -* The braille.BrailleDisplayGesture class now has an extra model property. If provided, pressing a key will generate an additional, model specific gesture identifier. This allows a user to bind gestures limited to a specific braille display model. +* The braille.BrailleDisplayGesture class now has an extra model property. If provided, pressing a key will generate an additional, model specific gesture identifier. This allows a user to bind gestures limited to a specific braille display model. * See the baum driver as an example for this new functionality. * NVDA is now compiled with Visual Studio 2017 and the Windows 10 SDK. (#7568) @@ -2988,7 +2988,7 @@ Highlights of this release include reporting of sections and text columns in Mic * Fixed freeze in Microsoft Word when moving by paragraph through a large document while in browse mode. (#6368) * Tables in Microsoft Word that have been copied from Microsoft Excel are no longer treeted as layout tables and therefore are no longer ignored. (#5927) * When trying to type in Microsoft Excel while in protected view, NVDA now makes a sound rather than speaking characters that were not actually typed. (#6570) -* Pressing escape in Microsoft Excel no longer incorrectly switches to browse mode, unless the user has previously switched to browse mode explicitly with NVDA+space and then entered focus mode by pressing enter on a form field. (#6569) +* Pressing escape in Microsoft Excel no longer incorrectly switches to browse mode, unless the user has previously switched to browse mode explicitly with NVDA+space and then entered focus mode by pressing enter on a form field. (#6569) * NVDA no longer freezes in Microsoft Excel spreadsheets where an entire row or column is merged. (#6216) * Reporting of cropped/overflowed text in Microsoft Excel cells should now be more accurate. (#6472) * NVDA now reports when a check box is read-only. (#6563) @@ -3097,7 +3097,7 @@ Highlights of this release include the ability to disable individual add-ons; su * Reporting colors in Microsoft Word is now more accurate as changes in Microsoft Office Themes are now taken into account. (#5997) * Browse mode for Microsoft Edge and support for Start Menu search suggestions is again available on Windows 10 builds after April 2016. (#5955) * In Microsoft Word, automatic table header reading works better when dealing with merged cells. (#5926) -* In the Windows 10 Mail app, NVDA no longer fails to read the content of messages. (#5635) +* In the Windows 10 Mail app, NVDA no longer fails to read the content of messages. (#5635) * When speak command keys is on, lock keys such as caps lock are no longer announced twice. (#5490) * Windows User Account Control dialogs are again read correctly in the Windows 10 Anniversary update. (#5942) * In the Web Conference Plugin (such as used on out-of-sight.net) NVDA no longer beeps and speaks progress bar updates related to microphone input. (#5888) @@ -3481,7 +3481,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * In the Microsoft Outlook message list, items are no longer pointlessly announced as Data Items. (#4439) * When selecting text in the code editing control in the Eclipse IDE, the entire selection is no longer announced every time the selection changes. (#2314) * Various versions of Eclipse, such as Spring Tool Suite and the version included in the Android Developer Tools bundle, are now recognised as Eclipse and handled appropriately. (#4360, #4454) -* Mouse tracking and touch exploration in Internet Explorer and other MSHTML controls (including many Windows 8 applications) is now much more accurate  on high DPI displays or when document zoom is changed. (#3494) +* Mouse tracking and touch exploration in Internet Explorer and other MSHTML controls (including many Windows 8 applications) is now much more accurate  on high DPI displays or when document zoom is changed. (#3494) * Mouse tracking and touch exploration in Internet Explorer and other MSHTML controls will now announce the label of more buttons. (#4173) * When using a Papenmeier BRAILLEX braille display with BrxCom, keys on the display now work as expected. (#4614) @@ -3504,7 +3504,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * Smart filtering of the date so as to only announce the date if the new selected time or appointment is on a different day to the last. * Enhanced support for the Inbox and other message lists in Microsoft Outlook 2010 and above (#3834) including: * The ability to silence column headers (from, subject, etc.) by turning off the Report Table row and column headers option in Document Formatting settings. - * The ability to use table navigation commands (control + alt + arrows) to move through the individual columns. + * The ability to use table navigation commands (control + alt + arrows) to move through the individual columns. * Microsoft word: If an inline image has no alternative text set, NVDA will instead report the title of the image if the author has provided one. (#4193) * Microsoft Word: NVDA can now report paragraph indenting with the report formatting command (NVDA+f). It can also be reported automatically when the new Report Paragraph indenting option is enabled in Document Formatting settings. (#4165) * Report automatically inserted text such as a new bullet, number or tab indent when pressing enter in editable documents and text fields. (#4185) @@ -3557,7 +3557,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * Microsoft Word 2010 spell check dialog: The actual misspelled word is reported rather than inappropriately reporting just the first bold word. (#3431) * In browse mode in Internet Explorer and other MSHTML controls, tabbing or using single letter navigation to move to form fields again reports the label in many cases where it didn't (specifically, where HTML label elements are used). (#4170) * Microsoft Word: Reporting the existence and placement of comments is more accurate. (#3528) -* Navigation of certain dialogs in MS Office products such as Word, Excel and Outlook has been improved by no longer reporting particular control container toolbars which are not useful to the user. (#4198) +* Navigation of certain dialogs in MS Office products such as Word, Excel and Outlook has been improved by no longer reporting particular control container toolbars which are not useful to the user. (#4198) * Task panes such as clipboard manager or File recovery no longer accidentilly seem to gain focus when opening an application such as Microsoft Word or Excel, which was sometimes causing the user to have to switch away from and back to the application to use the document or spreadsheet. (#4199) * NVDA no longer fails to run on recent Windows Operating Systems if the user's Windows language is set to Serbian (Latin). (#4203) * Pressing numlock while in input help mode now correctly toggles numlock, rather than causing the keyboard and the Operating System to become out of sync in regards to the state of this key. (#4226) @@ -3690,7 +3690,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * Form fields are now reported in Microsoft word documents. (#2295) * NVDA can now announce revision information in Microsoft Word when Track Changes is enabled. Note that Report editor revisions in NVDA's document settings dialog (off by default) must be enabled also for them to be announced. (#1670) * Dropdown lists in Microsoft Excel 2003 through 2010 are now announced when opened and navigated around. (#3382) -* a new 'Allow Skim Reading in Say All' option in the Keyboard settings dialog allows navigating through a document with browse mode quick navigation and line / paragraph movement commands, while remaining in say all. This option is off by default. (#2766) +* a new 'Allow Skim Reading in Say All' option in the Keyboard settings dialog allows navigating through a document with browse mode quick navigation and line / paragraph movement commands, while remaining in say all. This option is off by default. (#2766) * There is now an Input Gestures dialog to allow simpler customization of the input gestures (such as keys on the keyboard) for NVDA commands. (#1532) * You can now have different settings for different situations using configuration profiles. Profiles can be activated manually or automatically (e.g. for a particular application). (#87, #667, #1913) * In Microsoft Excel, cells that are links are now announced as links. (#3042) @@ -3763,7 +3763,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * Activating an object now announces the action before the activation, rather than the action after the activation (e.g. expand when expanding rather than collapse). (#2982) * More accurate reading and cursor tracking in various input fields for recent versions of Skype, such as chat and search fields. (#1601, #3036) * In the Skype recent conversations list, the number of new events is now read for each conversation if relevant. (#1446) -* Improvements to cursor tracking and reading order for right-to-left text written to the screen; e.g. editing Arabic text in Microsoft Excel. (#1601) +* Improvements to cursor tracking and reading order for right-to-left text written to the screen; e.g. editing Arabic text in Microsoft Excel. (#1601) * Quick navigation to buttons and form fields will now locate links marked as buttons for accessibility purposes in Internet Explorer. (#2750) * In browse mode, the content inside tree views is no longer rendered, as a flattened representation isn't useful. You can press enter on a tree view to interact with it in focus mode. (#3023) * Pressing alt+downArrow or alt+upArrow to expand a combo box while in focus mode no longer incorrectly switches to browse mode. (#2340) @@ -3780,7 +3780,7 @@ Highlights of this release include browse mode for documents in Microsoft Word a * In Java applications, changes to the label or value of the focused control are now announced automatically, and are reflected when subsequently querying the control. (#3119) * In Scintilla controls, lines are now reported correctly when word wrap is enabled. (#885) * In Mozilla applications, the name of read-only list items is now correctly reported; e.g. when navigating tweets in focus mode on twitter.com. (#3327) -* Confirmation dialogs in Microsoft Office 2013 now have their content automatically read when they appear. +* Confirmation dialogs in Microsoft Office 2013 now have their content automatically read when they appear. * Performance improvements when navigating certain tables in Microsoft Word. (#3326) * NVDA's table navigation commands (control+alt+arrows) function better in certain Microsoft Word tables where a cell spans multiple rows. * If the Add-ons Manager is already open, activating it again (either from the Tools menu or by opening an add-on file) no longer fails or makes it impossible to close the Add-ons Manager. (#3351) @@ -3837,7 +3837,7 @@ Please see the [Commands Quick Reference](keyCommands.html) document for the new * Basic support for editing and reading Microsoft PowerPoint presentations. (#501) * Basic support for reading and writing messages in Lotus Notes 8.5. (#543) -* Support for automatic language switching when reading documents in Microsoft Word. (#2047) +* Support for automatic language switching when reading documents in Microsoft Word. (#2047) * In Browse mode for MSHTML (e.g. Internet Explorer) and Gecko (e.g. Firefox), the existence of long descriptions are now announced. It's also possible to open the long description in a new window by pressing NVDA+d. (#809) * Notifications in Internet Explorer 9 and above are now spoken (such as content blocking or file downloads). (#2343) * Automatic reporting of table row and column headers is now supported for browse mode documents in Internet Explorer and other MSHTML controls. (#778) @@ -3889,7 +3889,7 @@ Please see the [Commands Quick Reference](keyCommands.html) document for the new * Fixed Bluetooth support for Papenmeier Braillex Trio. (#2995) * Fixed inability to use certain Microsoft Speech API version 5 voices such as Koba Speech 2 voices. (#2629) * In applications using the Java Access Bridge, braille displays are now updated correctly when the caret moves in editable text fields . (#3107) -* Support the form landmark in browse mode documents that support landmarks. (#2997) +* Support the form landmark in browse mode documents that support landmarks. (#2997) * The eSpeak synthesizer driver now handles reading by character more appropriately (e.g. announcing a foreign letter's name or value rather than just its sound or generic name). (#3106) * NVDA no longer fails to copy user settings for use on logon and other secure screens when the user's profile path contains non-ASCII characters. (#3092) * NVDA no longer freezes when using Asian character input in some .NET applications. (#3005) @@ -4033,13 +4033,13 @@ This release addresses several potential security issues (by upgrading Python t ## 2012.2 -Highlights of this release include an in-built installer and portable creation feature, automatic updates, easy management of new NVDA add-ons, announcement of graphics in Microsoft Word, support for Windows 8 Metro style apps, and several important bug fixes. +Highlights of this release include an in-built installer and portable creation feature, automatic updates, easy management of new NVDA add-ons, announcement of graphics in Microsoft Word, support for Windows 8 Metro style apps, and several important bug fixes. ### New Features * NVDA can now automatically check for, download and install updates. (#73) * Extending NVDA's functionality has been made easier with the addition of an Add-ons Manager (found under Tools in the NVDA menu) allowing you to install and uninstall new NVDA add-on packages (.nvda-addon files) containing plugins and drivers. Note the Add-on manager does not show older custom plugins and drivers manually copied in to your configuration directory. (#213) -* Many more common NVDA features now work in Windows 8 Metro style apps when using an installed release of NVDA, including speaking of typed characters, and browse mode for web documents (includes support for metro version of Internet Explorer 10). Portable copies of NVDA cannot access metro style apps. (#1801) +* Many more common NVDA features now work in Windows 8 Metro style apps when using an installed release of NVDA, including speaking of typed characters, and browse mode for web documents (includes support for metro version of Internet Explorer 10). Portable copies of NVDA cannot access metro style apps. (#1801) * In browse mode documents (Internet Explorer, Firefox, etc.), you can now jump to the start and past the end of certain containing elements (such as lists and tables) with shift+, and , respectively. (#123) * New language: Greek. * Graphics and alt text are now reported in Microsoft Word Documents. (#2282, #1541) @@ -4161,7 +4161,7 @@ Highlights of this release include automatic speech language switching when read ### New Features -* NVDA can now change the eSpeak synthesizer language on the fly when reading certain web/pdf documents with appropriate language information. Automatic language/dialect switching can be toggled on and off from the Voice Settings dialog. (#845) +* NVDA can now change the eSpeak synthesizer language on the fly when reading certain web/pdf documents with appropriate language information. Automatic language/dialect switching can be toggled on and off from the Voice Settings dialog. (#845) * Java Access Bridge 2.0.2 is now supported, which includes support for 64 bit Java Runtime Environments. * In Mozilla Gecko (e.g. Firefox) Heading levels are now announced when using object navigation. * Text formatting can now be reported when using browse mode in Mozilla Gecko (e.g. Firefox and Thunderbird). (#394) @@ -4180,7 +4180,7 @@ Highlights of this release include automatic speech language switching when read * NVDA will now restart itself if it crashes. * Some information displayed in braille has been abbreviated. (#1288) * the Read active window script (NVDA+b) has been improved to filter out unuseful controls and also is now much more easy to silence. (#1499) -* Automatic say all when a browse mode document loads is now optional via a setting in the Browse Mode settings dialog. (#414) +* Automatic say all when a browse mode document loads is now optional via a setting in the Browse Mode settings dialog. (#414) * When trying to read the status bar (Desktop NVDA+end), If a real status bar object cannot be located, NVDA will instead resort to using the bottom line of text written to the display for the active application. (#649) * When reading with say all in browse mode documents, NVDA will now pause at the end of headings and other block-level elements, rather than speaking the text together with the next lot of text as one long sentence. * In browse mode, pressing enter or space on a tab now activates it instead of switching to focus mode. (#1760) @@ -4382,7 +4382,7 @@ Highlights of this release include automatic reporting of new text output in mIR * Support for global plugins. Global plugins can add new functionality to NVDA which works across all applications. (#281) * A small beep is now heard when typing characters with the shift key while capslock is on. This can be turned off by unchecking the related new option in the Keyboard settings dialog. (#663) * hard page breaks are now announced when moving by line in Microsoft Word. (#758) -* Bullets and numbering are now spoken in Microsoft Word when moving by line. (#208) +* Bullets and numbering are now spoken in Microsoft Word when moving by line. (#208) * A command to toggle Sleep mode for the current application (NVDA+shift+s) is now available. Sleep mode (previously known as self voicing mode) disables all screen reading functionality in NVDA for a particular application. Very useful for applications that provide their own speech and or screen reading features. Press this command again to disable Sleep mode. * Some additional braille display key bindings have been added. See the Supported Braille Displays section of the User Guide for details. (#209) * For the convenience of third party developers, app modules as well as global plugins can now be reloaded without restarting NVDA. Use tools -> Reload plugins in the NVDA menu or NVDA+control+f3. (#544) @@ -4519,7 +4519,7 @@ Notable features of this release include greatly simplified object navigation; v * Saving configuration and changing of particular sensitive options is now disabled when running on the logon, UAC and other secure Windows screens. * Updated eSpeak speech synthesiser to 1.44.03. * If NVDA is already running, activating the NVDA shortcut on the desktop (which includes pressing control+alt+n) will restart NVDA. -* Removed the report text under the mouse checkbox from the Mouse settings dialog and replaced it with an Enable mouse tracking checkbox, which better matches the toggle mouse tracking script (NVDA+m). +* Removed the report text under the mouse checkbox from the Mouse settings dialog and replaced it with an Enable mouse tracking checkbox, which better matches the toggle mouse tracking script (NVDA+m). * Updates to the laptop keyboard layout so that it includes all commands available in the desktop layout and works correctly on non-English keyboards. (#798, #800) * Significant improvements and updates to the user documentation, including documentation of the laptop keyboard commands and synchronisation of the Keyboard Commands Quick Reference with the User Guide. (#455) * Updated liblouis braille translator to 2.1.1. Notably, this fixes some issues related to Chinese braille as well as characters which are undefined in the translation table. (#484, #499) @@ -4876,13 +4876,13 @@ Major highlights of this release include support for 64 bit editions of Windows; * added czech translation (by Tomas Valusek with help from Jaromir Vit) * added vietnamese translation by Dang Hoai Phuc * Added Africaans (af_ZA) translation, by Willem van der Walt. -* Added russian translation by Dmitry Kaslin +* Added russian translation by Dmitry Kaslin * Added polish translation by DOROTA CZAJKA and friends. * Added Japanese translation by Katsutoshi Tsuji. * added Thai translation by Amorn Kiattikhunrat -* added croatian translation by Mario Percinic and Hrvoje Katic -* Added galician translation by Juan C. buno -* added ukrainian translation by Aleksey Sadovoy +* added croatian translation by Mario Percinic and Hrvoje Katic +* Added galician translation by Juan C. buno +* added ukrainian translation by Aleksey Sadovoy ### Speech @@ -4921,7 +4921,7 @@ Major highlights of this release include support for 64 bit editions of Windows; * Improved support for the audacity application * Added support for a few edit/text controls in Skype * Improved support for Miranda instant messenger application -* Fixed some focus issues when opening html and plain text messages in Outlook Express. +* Fixed some focus issues when opening html and plain text messages in Outlook Express. * Outlook express newsgroup message fields are now labeled correctly * NVDA can now read the addresses in the Outlook Express message fields (to/from/cc etc) * NVDA should be now more accurate at announcing the next message in out look express when deleting a message from the message list. @@ -4956,7 +4956,7 @@ Major highlights of this release include support for 64 bit editions of Windows; ## 0.5 * NVDA now has a built-in synthesizer called eSpeak, developed by Jonathan Duddington.It is very responsive and lite-weight, and has support for many different languages. Sapi synthesizers can still be used, but eSpeak will be used by default. - * eSpeak does not depend on any special software to be installed, so it can be used with NVDA on any computer, on a USB thumb drive, or anywhere. + * eSpeak does not depend on any special software to be installed, so it can be used with NVDA on any computer, on a USB thumb drive, or anywhere. * For more info on eSpeak, or to find other versions, go to http://espeak.sourceforge.net/. * Fix bug where the wrong character was being announced when pressing delete in Internet Explorer / Outlook Express editable panes. * Added support for more edit fields in Skype. @@ -4966,12 +4966,12 @@ Major highlights of this release include support for 64 bit editions of Windows; * -q, --quit: quit any other already running instance of NVDA and then exit * -s, --stderr-file fileName: specify where NVDA should place uncaught errors and exceptions * -d, --debug-file fileName: specify where NVDA should place debug messages - * -c, --config-file: specify an alternative configuration file + * -c, --config-file: specify an alternative configuration file * -h, -help: show a help message listing commandline arguments * Fixed bug where punctuation symbols would not be translated to the appropriate language, when using a language other than english, and when speak typed characters was turned on. -* Added Slovak language files thanks to Peter Vagner +* Added Slovak language files thanks to Peter Vagner * Added a Virtual Buffer settings dialog and a Document Formatting settings dialog, from Peter Vagner. -* Added French translation thanks to Michel Such +* Added French translation thanks to Michel Such * Added a script to toggle beeping of progress bars on and off (insert+u). Contributed by Peter Vagner. * Made more messages in NVDA be translatable for other languages. This includes script descriptions when in keyboard help. * Added a find dialog to the virtualBuffers (internet Explorer and Firefox). Pressing control+f when on a page brings up a dialog in which you can type some text to find. Pressing enter will then search for this text and place the virtualBuffer cursor on this line. Pressing f3 will also search for the next occurance of the text. @@ -4985,7 +4985,7 @@ Major highlights of this release include support for 64 bit editions of Windows; * Re-structured an important part of the NVDA code, which should now fix many issues with NVDA's user interface (including settings dialogs). * Added Sapi4 support to NVDA. Currently there are two sapi4 drivers, one based on code contributed by Serotek Corporation, and one using the ActiveVoice.ActiveVoice com Interface. Both these drivers have issues, see which one works best for you. * Now when trying to run a new copy of NVDA while an older copy is still running will cause the new copy to just exit. This fixes a major problem where running multiple copies of NVDA makes your system very unusable. -* Renamed the title of the NVDA user interface from NVDA Interface to NVDA. +* Renamed the title of the NVDA user interface from NVDA Interface to NVDA. * Fixed a bug in Outlook Express where pressing backspace at the start of an editable message would cause an error. * Added patch from Rui Batista that adds a script to report the current battery status on laptops (insert+shift+b). * Added a synth driver called Silence. This is a synth driver that does not speak anything, allowing NVDA to stay completely silent at all times. Eventually this could be used along with Braille support, when we have it. @@ -5004,7 +5004,7 @@ Major highlights of this release include support for 64 bit editions of Windows; * Removed some developer documentation from the binary distribution of NVDA, it is only now in the source version. * Fixed a possible bug in Windows Live Messanger and MSN Messenger where arrowing up and down the contact list would cause errors. * New messages are now automatically spoken when in a conversation using Windows Live Messenger. (only works for English versions so far) -* The history window in a Windows Live Messenger conversation can now be read by using the arrow keys. (Only works for English versions so far) +* The history window in a Windows Live Messenger conversation can now be read by using the arrow keys. (Only works for English versions so far) * Added script 'passNextKeyThrough' (insert+f2). Press this key, and then the next key pressed will be passed straight through to Windows. This is useful if you have to press a certain key in an application but NVDA uses that key for something else. * NVDA no longer freezes up for more than a minute when opening very large documents in MS Word. * Fixed a bug where moving out of a table in MS Word, and then moving back in, caused the current row/column numbers not to be spoken if moving back in to exactly the same cell. @@ -5014,4 +5014,3 @@ Major highlights of this release include support for 64 bit editions of Windows; * NVDA now asks if it should save configuration and restart if the user has just changed the language in the User Interface Settings Dialog. NVDA must be restarted for the language change to fully take effect. * If a synthesizer can not be loaded, when choosing it from the synthesizer dialog, a message box alerts the user to the fact. * When loading a synthesizer for the first time, NVDA lets the synthesizer choose the most suitable voice, rate and pitch parameters, rather than forcing it to defaults it thinks are ok. This fixes a problem where Eloquence and Viavoice sapi4 synths start speaking way too fast for the first time. - \ No newline at end of file diff --git a/venvUtils/ensureAndActivate.bat b/venvUtils/ensureAndActivate.bat index 924172ebd5c..13ba6c55035 100644 --- a/venvUtils/ensureAndActivate.bat +++ b/venvUtils/ensureAndActivate.bat @@ -15,9 +15,9 @@ if ERRORLEVEL 1 goto :EOF rem Set the necessary environment variables to have Python use this virtual environment. rem This should set all the necessary environment variables that the standard .venv\scripts\activate.bat does rem Except that we set VIRTUAL_ENV to a path relative to this script, -rem rather than it being hard-coded to where the virtual environment was first created. +rem rather than it being hard-coded to where the virtual environment was first created. -rem unset the PYTHONHOME variable so as to ensure that Python does not use a customized Python standard library. +rem unset the PYTHONHOME variable so as to ensure that Python does not use a customized Python standard library. set PYTHONHOME= rem set the VIRTUAL_ENV variable instructing Python to use a virtual environment rem py.exe will honor VIRTUAL_ENV and launch the python.exe that it finds in %VIRTUAL_ENV%\scripts. diff --git a/venvUtils/venvCmd.bat b/venvUtils/venvCmd.bat index c18b6b1d135..9d2c5a47ae0 100644 --- a/venvUtils/venvCmd.bat +++ b/venvUtils/venvCmd.bat @@ -8,7 +8,7 @@ rem This script also supports running in an already fully activated NVDA Python rem If this is detected, the command is executed directly instead. if "%VIRTUAL_ENV%" NEQ "" ( if "%NVDA_VENV%" NEQ "%VIRTUAL_ENV%" ( - echo Warning: Detected a custom Python virtual environment. + echo Warning: Detected a custom Python virtual environment. echo It is recommended to run all NVDA build system commands outside of any existing Python virtual environment, unless you really know what you are doing. ) echo directly calling %*