nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
https://www.nvaccess.org/
Other
2.12k stars 638 forks source link

Settings window does not show when Serbian SAPI voices are selected #11186

Closed jankoval closed 4 years ago

jankoval commented 4 years ago

Steps to reproduce: Select SAPI engine and then select SAPI voice in Serbian and close the Settings window

Actual behavior: When trying to open Settings window, it is not displayed, if tried again the error will pop up saying "An NVDA settings dialog is already open. Please close it first." When the synthesizer is switched to another type instead of SAPI, or NVDA settings are reset to default, after the restart of NVDA everything works as expected. If any of the built-in Microsoft SAPI English voices are selected, the issue will remain until the first restart, then it will work as expected afterwards.

Expected behavior: Settings window should show up.

System configuration

NVDA installed/portable/running from source:

NVDA Installed

NVDA version:

2020.1

Windows version:

Windows 10, Version 1909 (OS Build 18363.836)

Name and version of other software in use when reproducing the issue:

Alfanum anReader Snezana 4.2.8 new Alfanum TTS SAPI voices (still under development)

Other information about your system:

After the Settings window fail to open, the log displays the following: ERROR - unhandled exception (17:07:27.141) - MainThread (13376): Traceback (most recent call last): File "gui__init.pyc", line 245, in onNVDASettingsCommand File "gui__init__.pyc", line 185, in _popupSettingsDialog File "gui\settingsDialogs.pyc", line 405, in init File "gui\settingsDialogs.pyc", line 155, in init File "gui\settingsDialogs.pyc", line 3532, in makeSettings File "gui\settingsDialogs.pyc", line 474, in makeSettings File "gui\settingsDialogs.pyc", line 590, in _doCategoryChange File "gui\settingsDialogs.pyc", line 511, in _getCategoryPanel File "gui\settingsDialogs.pyc", line 286, in init__ File "gui\settingsDialogs.pyc", line 296, in _buildGui File "gui\settingsDialogs.pyc", line 663, in makeSettings File "languageHandler.pyc", line 98, in getAvailableLanguages FileNotFoundError: [WinError 3] The system cannot find the path specified: 'locale'

Locale subfolder is present, and all the language subfolders are there, including sr folder.

And if a log level is increased, this is what is most probably causing the trouble:

DEBUGWARNING - synthDrivers.sapi5.SynthDriver.speak (21:35:59.973) - MainThread (11108): Unsupported speech command: LangChangeCommand ('sr_SP')

Other questions

Does the issue still occur after restarting your computer?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

No

If addons are disabled, is your problem still occuring?

There were no addons

Did you try to run the COM registry fixing tool in NVDA menu / tools?

No

JulienCochuyt commented 4 years ago

@jankoval, Could you please open the Python Console by pressing NVDA+control+z, paste in the following and post here the resulting output?

import os.path
os.path.abspath(os.curdir)
os.path.isdir(os.path.join(os.curdir, "locale"))
os.listdir("locale")
jankoval commented 4 years ago

Hi, thank you for the quick reply. It seems the new voice we are testing is faulty, it messes up some of the system settings and NVDA does not work properly, I even could not reinstall NVDA because of this issue until I unregistered all the dlls related to the new voice and rebooted the computer. Anyway, to answer your question:

When I select any built in SAPI voice, I get the following reply:

import os.path os.path.abspath(os.curdir) 'C:\Program Files (x86)\NVDA' os.path.isdir(os.path.join(os.curdir, "locale")) True ['af', 'af_ZA', 'am', 'an', 'ar', 'as', 'bg', 'bn', 'ca', 'ckb', 'cs', 'da', 'de', 'de_CH', 'el', 'en', 'es', 'es_CO', 'fa', 'fi', 'fr', 'ga', 'gl', 'gu', 'he', 'hi', 'hr', 'hu', 'id', 'is', 'it', 'ja', 'ka', 'kmr', 'kn', 'ko', 'kok', 'ky', 'lt', 'mk', 'ml', 'mn', 'mni', 'my', 'nb', 'nb_NO', 'ne', 'nl', 'nn_NO', 'pa', 'pl', 'pt', 'pt_BR', 'pt_PT', 'ro', 'ru', 'sk', 'sl', 'so', 'sq', 'sr', 'sr_SP', 'sv', 'ta', 'te', 'th', 'tr', 'uk', 'ur', 'vi', 'zh', 'zh_CN', 'zh_HK', 'zh_TW']

And with our testing voice I get the following:

import os.path os.path.abspath(os.curdir) 'C:\AlfaNum\Win32' os.path.isdir(os.path.join(os.curdir, "locale")) False FileNotFoundError: [WinError 3] The system cannot find the path specified: 'locale'

The path in the second case is the path of our testing voice, and as soon as I copied over locale folder from NVDA folder, everything starting working.

Thank you very much for your time, I think we can close it now.

Adriani90 commented 4 years ago

Excelent investigation work here, thank you very much guys! Very interesting to know.