EmuGUI icon indicating copy to clipboard operation
EmuGUI copied to clipboard

Accessibility Issue: emu gui windows is Not Usable with Screen Reader

Open NguyenVi07 opened this issue 8 months ago • 33 comments

Hello,

First of all, thank you for your work on this project.

I am blind and rely entirely on a screen reader to use my computer. Specifically, I am using NVDA 2024.4.2 on Windows 10 Pro 64-bit.

I recently tried using EmuGUI_v2.0.10.5621_Win_amd64, but unfortunately, the program is almost completely inaccessible with a screen reader. Most of the user interface elements are either unlabeled, not reachable with the keyboard, or do not provide any feedback to the screen reader.

As a regular user (not a developer), this makes it very difficult or impossible for me to use the application.

I would greatly appreciate it if accessibility improvements could be considered in future updates. Making the UI more screen-reader-friendly would help many users like me benefit from this software.

Thank you for your attention, and please let me know if I can provide any further details to help.

Best regards,
Nguyễn Hùng Vỹ

NguyenVi07 avatar May 20 '25 13:05 NguyenVi07

As someone who needs glasses to not be almost blind, I completely understand your concern. I will look into this issue and adjust a feature update of EmuGUI to accommodate your disability if necessary.

Tech-FZ avatar May 20 '25 16:05 Tech-FZ

Wow, thank you for your comment. I hope this update will be released soon. If you need any more information, please let me know. I can be a tester if you need one.


Accessibility Issues in Installer

  1. Lack of Clear Labels for Screen Readers: The installer settings lack clear labels for screen readers. Specifically, the virtual machine creation section is missing labels for combo boxes, sliders, and input fields. Many other accessibility issues exist, but I was unable to access and list them all due to my limitations. I apologize for the poor presentation; I am unfamiliar with technical documentation formatting.

NguyenVi07 avatar May 20 '25 16:05 NguyenVi07

Hi, I wish you a good morning. I tried to turn on NVDA at the debugging and this was my log. Hope you will improve because this software is really great.

NVDA log, click to see

IO - speech.speech.speak (06:35:56.844) - MainThread (7440): Speaking ['EmuGUI 2.0.10.5621', 'window', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:35:59.825) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:35:59.876) - MainThread (7440): Speaking ['Main', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:35:59.878) - MainThread (7440): Speaking ['Main', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:00.850) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:00.906) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:00.908) - MainThread (7440): Speaking ['list', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:00.910) - MainThread (7440): Speaking ['test', 'not selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:04.544) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:04.574) - MainThread (7440): Speaking ['Main', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:04.576) - MainThread (7440): Speaking ['Main', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:05.137) - winInputHook (10236): Input: kb(laptop):rightArrow IO - speech.speech.speak (06:36:05.170) - MainThread (7440): Speaking ['Settings', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:05.696) - winInputHook (10236): Input: kb(laptop):rightArrow IO - inputCore.InputManager.executeGesture (06:36:06.097) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:06.141) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:06.144) - MainThread (7440): Speaking ['General', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:06.146) - MainThread (7440): Speaking ['General', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:07.425) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:07.466) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:07.468) - MainThread (7440): Speaking ['combo box', 'System default', 'collapsed', 'Down', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:09.241) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:09.263) - MainThread (7440): Speaking ['combo box', 'System default', 'collapsed', 'Down', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:09.897) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:09.918) - MainThread (7440): Speaking ['Apply', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:10.456) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:10.485) - MainThread (7440): Speaking ['Settings', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:10.487) - MainThread (7440): Speaking ['Settings', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:11.096) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:11.138) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:11.140) - MainThread (7440): Speaking ['General', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:11.142) - MainThread (7440): Speaking ['General', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:11.904) - winInputHook (10236): Input: kb(laptop):rightArrow IO - speech.speech.speak (06:36:11.933) - MainThread (7440): Speaking ['QEMU (1)', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:13.225) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:13.277) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:13.279) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-img.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:15.192) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:15.192) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:15.214) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:15.214) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:15.215) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:15.215) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:15.215) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:15.223) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:15.712) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:15.738) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-system-i386.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:17.560) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:17.561) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:17.568) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:17.568) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:17.569) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:17.569) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:17.569) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:17.595) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:17.753) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:17.783) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-system-x86_64.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:19.920) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:19.921) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:19.946) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:19.946) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:19.946) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:19.946) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:19.946) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:19.954) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:20.489) - winInputHook (10236): Input: kb(laptop):space IO - speech.speech.speak (06:36:21.471) - MainThread (7440): Speaking ['Select qemu-system-x86_64 executable', 'dialog', 'File name:', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:21.473) - MainThread (7440): Speaking ['File name:', 'combo box', 'collapsed', CancellableSpeech (still valid)] DEBUG - NVDAObjects.NVDAObject._get_placeholder (06:36:21.475) - MainThread (7440): Potential unimplemented child class: IO - speech.speech.speak (06:36:21.476) - MainThread (7440): Speaking ['edit', 'Alt+', CharacterModeCommand(True), 'n', CharacterModeCommand(False), CancellableSpeech (still valid), 'blank'] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:22.816) - winInputHook (10236): script: None DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:22.817) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:22.817) - winInputHook (10236): Input: kb(laptop):escape IO - speech.speech.speak (06:36:22.972) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:22.975) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:22.978) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:22.995) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:23.298) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:23.327) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-system-ppc.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:25.000) - winInputHook (10236): script: None DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:25.080) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:25.080) - winInputHook (10236): Input: kb(laptop):shift+tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:25.107) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.107) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.107) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.107) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.107) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:25.116) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:25.257) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:25.287) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-system-x86_64.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:25.416) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:25.416) - winInputHook (10236): Input: kb(laptop):shift+tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:25.422) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.422) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.423) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.423) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.423) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:25.447) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:25.577) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:25.610) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-system-i386.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:25.752) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:25.753) - winInputHook (10236): Input: kb(laptop):shift+tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:25.758) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.759) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.759) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:25.759) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:25.759) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:25.784) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:25.929) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:25.963) - MainThread (7440): Speaking ['edit', 'C:/Program Files/qemu/qemu-img.exe', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:26.136) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:26.137) - winInputHook (10236): Input: kb(laptop):shift+tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:26.142) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:26.143) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:26.143) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:26.143) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:26.143) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:26.176) - MainThread (7440): Speaking ['QEMU (1)', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:26.178) - MainThread (7440): Speaking ['QEMU (1)', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:26.361) - winInputHook (10236): Input: kb(laptop):shift+tab DEBUG - speech.manager.SpeechManager._handleIndex (06:36:26.375) - MainThread (7440): Unknown index 53, speech probably cancelled from main thread. IO - speech.speech.speak (06:36:26.390) - MainThread (7440): Speaking ['Settings', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:26.392) - MainThread (7440): Speaking ['Settings', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:26.585) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:26.641) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:26.643) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:26.645) - MainThread (7440): Speaking ['Apply', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:27.777) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:27.797) - MainThread (7440): Speaking ['Browse', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:28.513) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:28.537) - MainThread (7440): Speaking ['Apply', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:28.785) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:28.816) - MainThread (7440): Speaking ['Settings', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:28.818) - MainThread (7440): Speaking ['Settings', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:29.290) - winInputHook (10236): Input: kb(laptop):NVDA+tab IO - speech.speech.speak (06:36:29.293) - MainThread (7440): Speaking ['Settings', 'tab', 'focused', 'selected'] IO - inputCore.InputManager.executeGesture (06:36:30.081) - winInputHook (10236): Input: kb(laptop):leftArrow IO - speech.speech.speak (06:36:30.105) - MainThread (7440): Speaking ['Main', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:30.649) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:30.705) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:30.707) - MainThread (7440): Speaking ['list', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:30.709) - MainThread (7440): Speaking ['test', 'not selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:32.657) - winInputHook (10236): Input: kb(laptop):space DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:32.679) - MainThread (7440): Unable to use _getIA2TargetsForRelationsOfType, fallback to _IA2Relations. DEBUG - NVDAObjects.IAccessible.IAccessible._get__IA2Relations (06:36:32.679) - MainThread (7440): Not an IA2.IAccessible2 DEBUG - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:32.679) - MainThread (7440): Unable to fetch _IA2Relations Traceback (most recent call last): File "NVDAObjects\IAccessible\__init__.pyc", line 1863, in _getIA2RelationFirstTarget File "baseObject.pyc", line 59, in __get__ File "baseObject.pyc", line 167, in _getPropertyViaCache File "NVDAObjects\IAccessible\__init__.pyc", line 1780, in _get__IA2Relations NotImplementedError IO - inputCore.InputManager.executeGesture (06:36:33.265) - winInputHook (10236): Input: kb(laptop):NVDA+tab IO - speech.speech.speak (06:36:33.271) - MainThread (7440): Speaking ['test', 'list item', 'focused', 'selected'] IO - inputCore.InputManager.executeGesture (06:36:33.970) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:33.996) - MainThread (7440): Speaking ['New virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:34.608) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:34.630) - MainThread (7440): Speaking ['Start virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:35.617) - winInputHook (10236): Input: kb(laptop):space DEBUG - config.featureFlag._validateConfig_featureFlag (06:36:35.772) - Dummy-4 (6440): Validating feature flag: DEFAULT, optionsEnum: WindowsTerminalStrategyFlag, behaviorOfDefault: DIFFING DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:35.802) - MainThread (7440): Unable to use _getIA2TargetsForRelationsOfType, fallback to _IA2Relations. DEBUG - NVDAObjects.IAccessible.IAccessible._get__IA2Relations (06:36:35.802) - MainThread (7440): Not an IA2.IAccessible2 DEBUG - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:35.802) - MainThread (7440): Unable to fetch _IA2Relations Traceback (most recent call last): File "NVDAObjects\IAccessible\__init__.pyc", line 1863, in _getIA2RelationFirstTarget File "baseObject.pyc", line 59, in __get__ File "baseObject.pyc", line 167, in _getPropertyViaCache File "NVDAObjects\IAccessible\__init__.pyc", line 1780, in _get__IA2Relations NotImplementedError IO - speech.speech.speak (06:36:35.860) - MainThread (7440): Speaking ['edit', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:36.776) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:36.777) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:36.794) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:36.794) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:36.794) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:36.794) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:36.794) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:36.802) - MainThread (7440): Speaking ['Browse', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:38.457) - winInputHook (10236): Input: kb(laptop):escape IO - speech.speech.speak (06:36:38.507) - MainThread (7440): Speaking ['EmuGUI 2.0.10.5621', 'window', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:38.557) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:38.559) - MainThread (7440): Speaking ['Start virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:38.737) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:38.757) - MainThread (7440): Speaking ['New virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:38.913) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:38.951) - MainThread (7440): Speaking ['list', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:38.954) - MainThread (7440): Speaking ['test', 'not selected', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:38.969) - MainThread (7440): Speaking ['test', 'not selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:39.296) - winInputHook (10236): Input: kb(laptop):shift+tab IO - speech.speech.speak (06:36:39.323) - MainThread (7440): Speaking ['Main', 'tab control', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:39.325) - MainThread (7440): Speaking ['Main', 'tab', 'selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:39.873) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:39.920) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:39.922) - MainThread (7440): Speaking ['list', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:39.923) - MainThread (7440): Speaking ['test', 'not selected', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:41.210) - winInputHook (10236): Input: kb(laptop):NVDA+shift+m IO - tones.beep (06:36:41.221) - MainThread (7440): Beep at pitch 751.0555555555555, for 40 ms, left volume 47, right volume 37 DEBUG - tones.beep (06:36:41.221) - MainThread (7440): Beep canceled by handler registered to decide_beep extension point IO - speech.speech.speak (06:36:41.224) - MainThread (7440): Speaking ['test'] IO - inputCore.InputManager.executeGesture (06:36:42.153) - winInputHook (10236): Input: kb(laptop):NVDA+[ IO - speech.speech.speak (06:36:42.153) - MainThread (7440): Speaking ['Left click'] DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:42.180) - MainThread (7440): Unable to use _getIA2TargetsForRelationsOfType, fallback to _IA2Relations. DEBUG - NVDAObjects.IAccessible.IAccessible._get__IA2Relations (06:36:42.180) - MainThread (7440): Not an IA2.IAccessible2 DEBUG - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:42.180) - MainThread (7440): Unable to fetch _IA2Relations Traceback (most recent call last): File "NVDAObjects\IAccessible\__init__.pyc", line 1863, in _getIA2RelationFirstTarget File "baseObject.pyc", line 59, in __get__ File "baseObject.pyc", line 167, in _getPropertyViaCache File "NVDAObjects\IAccessible\__init__.pyc", line 1780, in _get__IA2Relations NotImplementedError IO - inputCore.InputManager.executeGesture (06:36:43.073) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:43.099) - MainThread (7440): Speaking ['New virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:43.576) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:43.598) - MainThread (7440): Speaking ['Start virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:44.433) - winInputHook (10236): Input: kb(laptop):NVDA+shift+m IO - tones.beep (06:36:44.442) - MainThread (7440): Beep at pitch 649.6111111111111, for 40 ms, left volume 25, right volume 59 DEBUG - tones.beep (06:36:44.442) - MainThread (7440): Beep canceled by handler registered to decide_beep extension point IO - speech.speech.speak (06:36:44.445) - MainThread (7440): Speaking ['Start virtual machine'] IO - inputCore.InputManager.executeGesture (06:36:45.417) - winInputHook (10236): Input: kb(laptop):NVDA+[ IO - speech.speech.speak (06:36:45.417) - MainThread (7440): Speaking ['Left click'] DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:45.530) - MainThread (7440): Unable to use _getIA2TargetsForRelationsOfType, fallback to _IA2Relations. DEBUG - NVDAObjects.IAccessible.IAccessible._get__IA2Relations (06:36:45.531) - MainThread (7440): Not an IA2.IAccessible2 DEBUG - NVDAObjects.IAccessible.IAccessible._getIA2RelationFirstTarget (06:36:45.531) - MainThread (7440): Unable to fetch _IA2Relations Traceback (most recent call last): File "NVDAObjects\IAccessible\__init__.pyc", line 1863, in _getIA2RelationFirstTarget File "baseObject.pyc", line 59, in __get__ File "baseObject.pyc", line 167, in _getPropertyViaCache File "NVDAObjects\IAccessible\__init__.pyc", line 1780, in _get__IA2Relations NotImplementedError IO - speech.speech.speak (06:36:45.583) - MainThread (7440): Speaking ['edit', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:46.208) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:46.208) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:46.224) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:46.224) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:46.224) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:46.224) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:46.224) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:46.232) - MainThread (7440): Speaking ['Browse', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:46.664) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:46.700) - MainThread (7440): Speaking ['edit', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:47.024) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:47.025) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:47.043) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:47.043) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:47.043) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:47.043) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:47.043) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:47.050) - MainThread (7440): Speaking ['Browse', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:47.424) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:47.454) - MainThread (7440): Speaking ['edit', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:47.728) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:47.729) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:47.747) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:47.747) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:47.747) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:47.747) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:47.747) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:47.756) - MainThread (7440): Speaking ['Browse', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:48.073) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:48.094) - MainThread (7440): Speaking ['combo box', 'c', 'collapsed', 'Down', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:48.377) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:48.415) - MainThread (7440): Speaking ['edit', CancellableSpeech (still valid)] DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.getScript (06:36:49.424) - winInputHook (10236): script: None IO - inputCore.InputManager.executeGesture (06:36:49.425) - winInputHook (10236): Input: kb(laptop):tab DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakTypedCharacters (06:36:49.439) - MainThread (7440): speakTypedCharacter: (9) DEBUG - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:49.439) - MainThread (7440): speakPreviousWord: DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:49.439) - MainThread (7440): hasNewWordBeenTyped: wordSeparator= (9) DEBUG - external:globalPlugins.speakTypingWords.EditableTextUseTextInfoToSpeakTypedWords.hasNewWordBeenTyped (06:36:49.439) - MainThread (7440): no bookmark IO - external:globalPlugins.speakTypingWords.speechEx.speakPreviousWord (06:36:49.439) - MainThread (7440): typed word: IO - speech.speech.speak (06:36:49.447) - MainThread (7440): Speaking ['Start VM', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:50.249) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:50.274) - MainThread (7440): Speaking ['Cancel', 'button', 'Enter', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:51.145) - winInputHook (10236): Input: kb(laptop):tab IO - speech.speech.speak (06:36:51.171) - MainThread (7440): Speaking ['Use RTC option', 'check box', 'not checked', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:54.329) - winInputHook (10236): Input: kb(laptop):escape IO - speech.speech.speak (06:36:54.376) - MainThread (7440): Speaking ['EmuGUI 2.0.10.5621', 'window', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:54.429) - MainThread (7440): Speaking ['button', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:54.431) - MainThread (7440): Speaking ['Start virtual machine', 'button', CancellableSpeech (still valid)] IO - inputCore.InputManager.executeGesture (06:36:56.440) - winInputHook (10236): Input: kb(laptop):alt+f4 IO - speech.speech.speak (06:36:56.503) - MainThread (7440): Speaking ['H:\\qemu\\EmuGUI_v2.0.10.5621_Win_amd64\\emugui.exe', 'window', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:56.509) - MainThread (7440): Speaking ['terminal', CancellableSpeech (still valid), 'blank'] DEBUGWARNING - NVDAObjects.UIA.UIATextInfo.__init__ (06:36:56.524) - Dynamic_EditableTextUseTextInfoToSpeakTypedWordsConsoleControlVTmuxWindowSwitcherWinConsoleUIAEditableTextWithAutoSelectDetectionUIA._monitorThread (5516): Could not clone range Traceback (most recent call last): File "NVDAObjects\UIA\__init__.pyc", line 476, in __init__ _ctypes.COMError: (-2147220991, 'An event was unable to invoke any of the subscribers', (None, None, None, 0, None)) ERROR - NVDAObjects.behaviors.LiveText._monitor (06:36:56.525) - Dynamic_EditableTextUseTextInfoToSpeakTypedWordsConsoleControlVTmuxWindowSwitcherWinConsoleUIAEditableTextWithAutoSelectDetectionUIA._monitorThread (5516): Error getting initial text Traceback (most recent call last): File "NVDAObjects\UIA\__init__.pyc", line 476, in __init__ _ctypes.COMError: (-2147220991, 'An event was unable to invoke any of the subscribers', (None, None, None, 0, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "NVDAObjects\behaviors.pyc", line 464, in monitor File "NVDAObjects\behaviors.pyc", line 447, in getText File "diffHandler.pyc", line 194, in getText File "textInfos_init.pyc", line 623, in getTextInChunks File "NVDAObjects\UIA_init.pyc", line 1085, in copy File "NVDAObjects\UIA\winConsoleUIA.pyc", line 51, in init File "NVDAObjects\UIA_init.pyc", line 480, in init RuntimeError: Could not clone range DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:36:56.560) - MainThread (7440): accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None)) DEBUG - appModuleHandler.cleanup (06:36:56.591) - MainThread (7440): application emugui closed DEBUG - appModuleHandler.cleanup (06:36:56.591) - MainThread (7440): application conhost closed IO - speech.speech.speak (06:36:56.645) - MainThread (7440): Speaking ['EmuGUI_v2.0.10.5621_Win_amd64', 'window', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:56.652) - MainThread (7440): Speaking ['Items View', 'list', CancellableSpeech (still valid)] IO - speech.speech.speak (06:36:56.663) - MainThread (7440): Speaking ['emugui.exe', '19 of 34', CancellableSpeech (still valid)]

NguyenVi07 avatar May 20 '25 23:05 NguyenVi07

Thank you for providing the NVDA log. Again, I will look into this issue.

Tech-FZ avatar May 21 '25 14:05 Tech-FZ

I really appreciate you noticing a bug that very few people have spotted. So, how can I get notified when there's a new update? And how can I contact you if I want to participate in accessibility testing?

NguyenVi07 avatar May 21 '25 14:05 NguyenVi07

So, how can I get notified when there's a new update?

I will notify you via this issue when I progressed.

And how can I contact you if I want to participate in accessibility testing?

This issue exists. If you want to have a private chat with me regarding testing, please consider contacting me via Discord (lucien_rowan) or via email ([email protected]).

Also, I finally got to test it on a Windows 10 VM of mine and it looks like NVDA seems to misbehave when you try to select something from a combobox and have to hover over an entry which blocks the view of another layout component. I'd still have to investigate whether or not this is an EmuGUI or an NVDA issue though.

Tech-FZ avatar May 21 '25 14:05 Tech-FZ

Update: The file explorer is not affected by the issue described in my previous comment.

Tech-FZ avatar May 21 '25 14:05 Tech-FZ

Update: It looks like NVDA can't read anything from QEMU (the program used to run the VMs) at all. Do you want to check that yourself somehow?

Tech-FZ avatar May 21 '25 14:05 Tech-FZ

Update: It looks like NVDA can't read anything from QEMU (the program used to run the VMs) at all. Do you want to check that yourself somehow?

You can press NVDA+r to use NVDA's OCR feature. Alternatively, you can use Ctrl+Alt+G to switch keyboard focus between the virtual machine and the host machine.

NguyenVi07 avatar May 21 '25 15:05 NguyenVi07

What is the NVDA key again?

Tech-FZ avatar May 21 '25 15:05 Tech-FZ

What is the NVDA key again?

NVDA and r, that's a keyboard shortcut The NVDA key is a key you can use to interact with NVDA's functions. It can be the Caps Lock key, the Insert key, or another key, depending on your settings.

NguyenVi07 avatar May 21 '25 15:05 NguyenVi07

Still doesn't notice anything, despite claiming it did...

Tech-FZ avatar May 21 '25 15:05 Tech-FZ

Can you give me the commands to run Windows 10? I have a Windows ISO and QEMU here. I'll make a video showing you how I can interact with the QEMU software.

NguyenVi07 avatar May 21 '25 15:05 NguyenVi07

To run a QEMU Windows 10 VM from the command line, type in the following:

  • Create hard disk: C:\Program Files\qemu\qemu-img create -f qcow2 win10.img 40G (directories may differ)
  • Run VM with TCG: C:\Program Files\qemu\qemu-system-x86_64 -hda win10.img -cdrom win10_iso_name.iso -boot d -accel tcg -cpu host -m 4G -vga std -net nic,model=e1000 -net user -usbdevice tablet -rtc base=localtime
  • Run VM with WHPX: C:\Program Files\qemu\qemu-system-x86_64 -hda win10.img -cdrom win10_iso_name.iso -boot d -accel whpx -cpu host -m 4G -vga std -net nic,model=e1000 -net user -usbdevice tablet -rtc base=localtime or C:\Program Files\qemu\qemu-system-x86_64 -hda win10.img -cdrom win10_iso_name.iso -boot d -accel whpx,kernel-irqchip=off -cpu host -m 4G -vga std -net nic,model=e1000 -net user -usbdevice tablet -rtc base=localtime

Tech-FZ avatar May 21 '25 15:05 Tech-FZ

'qemu-img' is not recognized as an internal or external command, operable program or batch file.

NguyenVi07 avatar May 21 '25 16:05 NguyenVi07

qemu-system-x86_64: unable to find CPU model 'host'

NguyenVi07 avatar May 21 '25 16:05 NguyenVi07

Try to replace host with qemu64.

Tech-FZ avatar May 21 '25 16:05 Tech-FZ

I don't know why, but the QEMU screen isn't displaying the OS setup interface as expected.

https://github.com/user-attachments/assets/969143a7-bd83-4aee-b655-18bd96e0d3ad

NguyenVi07 avatar May 21 '25 16:05 NguyenVi07

The only thing helping here is patience.

Tech-FZ avatar May 21 '25 16:05 Tech-FZ

I'm sorry if I'm bothering you too much. I can't see my screen, so I don't know what's happening with QEMU.

NguyenVi07 avatar May 21 '25 17:05 NguyenVi07

I have another problem: how do I get QEMU to have sound when I run a virtual machine? I need sound to use a screen reader to read everything while I set up my Windows.

NguyenVi07 avatar May 21 '25 17:05 NguyenVi07

Add -device intel-hda to the command.

Tech-FZ avatar May 21 '25 17:05 Tech-FZ

I can't hear the narrator's screen reader. Could you try pressing ctrl+win+enter?

NguyenVi07 avatar May 21 '25 17:05 NguyenVi07

On the host or the guest?

Tech-FZ avatar May 21 '25 17:05 Tech-FZ

Of course, it's in guest. Everything I use on my real machine works fine.

NguyenVi07 avatar May 21 '25 17:05 NguyenVi07

Can we add each other on Telegram? I usually use Telegram.

NguyenVi07 avatar May 21 '25 17:05 NguyenVi07

I wrote you a Hello message via Telegram if you still need more personal help.

Tech-FZ avatar May 21 '25 18:05 Tech-FZ

I just woke up. I've sent you my problem via Telegram.

NguyenVi07 avatar May 22 '25 01:05 NguyenVi07

Here are the results we got so far:

  • We need to make NVDA able to say what components are for.
  • We will need to implement some dialogs for deletion, import and export.
  • The VM fetching process needs to be tied to events instead of the 10-second rule.
  • For Windows users at least, we have to implement a way to set all binaries just with setting the qemu folder path once.

Tech-FZ avatar May 23 '25 04:05 Tech-FZ

Ah great, these are the things we discussed yesterday. Also, can you let users press F5 to manually refresh the list if any issues arise?

NguyenVi07 avatar May 23 '25 12:05 NguyenVi07