Fixed a bug that could leave you without speech if changing the active window.

This commit is contained in:
Storm Dragon
2026-07-25 05:05:46 -04:00
parent 6ec512ea33
commit 57e9661468
3 changed files with 126 additions and 0 deletions
+9
View File
@@ -112,6 +112,7 @@ class SettingsManager(object):
self._appPronunciations: Dict[str, Any] = {}
self._appKeybindings: Dict[str, Any] = {}
self._lastRoleSoundPresentation: Optional[Any] = None
self._session_settings: Dict[str, Any] = {}
if not self._loadBackend():
raise Exception('SettingsManager._loadBackend failed.')
@@ -383,6 +384,12 @@ class SettingsManager(object):
def setSetting(self, settingName: str, settingValue: Any) -> None:
self._setSettingsRuntime({settingName:settingValue})
def set_session_setting(self, setting_name: str, setting_value: Any) -> None:
"""Set a process-lifetime setting which survives application changes."""
self._session_settings[setting_name] = copy.deepcopy(setting_value)
self._setSettingsRuntime({setting_name: setting_value})
def getSetting(self, settingName: str) -> Any:
return getattr(settings, settingName, None)
@@ -582,6 +589,8 @@ class SettingsManager(object):
self._getCustomizedSettings()
for key, value in self.customizedSettings.items():
setattr(settings, str(key), value)
for key, value in self._session_settings.items():
setattr(settings, str(key), copy.deepcopy(value))
msg = 'SETTINGS MANAGER: Runtime settings set.'
debug.printMessage(debug.LEVEL_INFO, msg, True)
@@ -375,6 +375,7 @@ class SpeechAndVerbosityManager:
}
default_voice[acss.ACSS.FAMILY] = family_dict
default_voice['established'] = True
self.app.getSettingsManager().set_session_setting("voices", settings.voices)
def _get_current_speech_setting(self):
order = self._get_speech_settings_order()
@@ -405,6 +406,7 @@ class SpeechAndVerbosityManager:
default_voice = self._get_default_voice()
default_voice[acss.ACSS.RATE] = int(value)
default_voice['established'] = True
self.app.getSettingsManager().set_session_setting("voices", settings.voices)
def _get_pitch_value(self):
from . import acss
@@ -416,6 +418,7 @@ class SpeechAndVerbosityManager:
default_voice = self._get_default_voice()
default_voice[acss.ACSS.AVERAGE_PITCH] = float(value)
default_voice['established'] = True
self.app.getSettingsManager().set_session_setting("voices", settings.voices)
def _get_volume_value(self):
from . import acss
@@ -427,6 +430,7 @@ class SpeechAndVerbosityManager:
default_voice = self._get_default_voice()
default_voice[acss.ACSS.GAIN] = float(value)
default_voice['established'] = True
self.app.getSettingsManager().set_session_setting("voices", settings.voices)
def _get_current_voice_name(self, server=None):
from . import acss
@@ -708,6 +712,10 @@ class SpeechAndVerbosityManager:
debug.printMessage(debug.LEVEL_WARNING, f"Error setting output module: {e}", True)
return True
settings.speechServerInfo = [new_module, new_module]
self.app.getSettingsManager().set_session_setting(
"speechServerInfo",
settings.speechServerInfo,
)
msg = f"SPEECH AND VERBOSITY MANAGER: speechServerInfo set to {settings.speechServerInfo}"
debug.printMessage(debug.LEVEL_INFO, msg, True)