Message Dialog API take 2 (#17582)
Closes #13007
Closes #12344
Closes #12353
Summary of the issue:
This is the second PR to merge the message dialog API into NVDA. The previous merge was at `f437723`.
See #17304 for full implementation details.
The original PR was reverted by #17561, due to #17553 and #17560.
Description of user facing changes
This PR does not, in itself, introduce any end-user facing changes. However, it lays the groundwork for closing a number of issues.
Tasks
- [x] Fix the COM registration fixing tool (#17560)
- [x] Fix NVDA updates (#17553)
Description of development approach
Restored `gui.nvdaControls.MessageDialog` inheriting from `ContextHelpMixin`, which was accidentally lost.
Changed `updateCheck.UpdateAskInstallDialog.onUpdateButton` and `onPostponeButton` to simply end the modal, returning the appropriate code. Added a static method to `UpdateAskInstallDialog` which returns a callback function which, when given the return code from `UpdateAskInstallDialog`, performs the appropriate action. Added a property method to generate this callback function given the attributes of the instance on which it is called.
Testing strategy:
Created a portable copy of NVDA (`scons dist`), and tested running the CRFT:
- Running and granting permission - works as expected
- Running and denying permission - works as expected
- Cancelling - works as expected
Added `updateVersionType="snapshot:alpha" to `source/versionInfo.py`, and tested updating with NVDA running from source:
1. Attempt updating via NVDA menu -> Help -> Check for update... -> Download update -> Update - works as expected
2. Update by downloading then postponing update, then exit NVDA -> Install pending update
a. Without incompatible updates installed - works as expected
b. With incompatible updates installed - works as expected
3. Update by downloading then postponing update, restarting NVDA, then NVDA menu -> Install pending update - works as expected
4. Update by downloading then postponing update, restarting NVDA, then accepting the prompt to install the update - works as expected