Work around startup UI freeze caused by QtTextToSpeech
This merge request works around an annoying startup hang that I introduced when adding text-to-speech to NeoChat. The previous implementation was a QML singleton that used the `TextToSpeech` QML component. Unfortunately that component blocks the UI thread when first loading it, while it connects to speech-dispatcher. This MR just rewrites that singleton in C++, and moves initialization of QtTextToSpeech to the first time you read a message aloud. It doesn't fix the performance problem, but it at least stops it from affecting startup. In the future, I'd like to move speech operations to a background thread to completely mitigate the initialization freeze.
This commit is contained in:
@@ -196,7 +196,6 @@ Kirigami.ApplicationWindow {
|
||||
NeoChatSettingsView.window = root;
|
||||
NeoChatSettingsView.connection = root.connection;
|
||||
WindowController.setBlur(pageStack, NeoChatConfig.blur && !NeoChatConfig.compactLayout);
|
||||
TextToSpeechWrapper.warmUp();
|
||||
if (ShareHandler.text && root.connection) {
|
||||
root.handleShare()
|
||||
}
|
||||
|
||||
@@ -1,24 +0,0 @@
|
||||
// SPDX-FileCopyrightText: 2025 Ritchie Frodomar <alkalinethunder@gmail.com>
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
pragma Singleton
|
||||
|
||||
import QtQuick
|
||||
import QtTextToSpeech
|
||||
|
||||
QtObject {
|
||||
id: root
|
||||
|
||||
readonly property TextToSpeech tts: TextToSpeech {
|
||||
id: tts
|
||||
}
|
||||
|
||||
function warmUp() {
|
||||
// TODO: This method is called on startup to avoid a UI freeze the first time you read a message aloud, but there's nothing for it to do.
|
||||
// This would be a good place to check if TTS can actually be used.
|
||||
}
|
||||
|
||||
function say(text: String) {
|
||||
tts.say(text)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user