mirror of
https://github.com/Rockbox/rockbox.git
synced 2026-10-10 08:03:04 -04:00
Voice file and Talk clip generation currently run synchronously in the GUI thread. During long TTS operations this prevents the progress window from processing input and accessibility events. On Windows this makes the progress list unavailable to screen readers such as NVDA and can make Rockbox Utility appear to be hung. The attached patch moves VoiceFileCreator and TalkFileCreator to low-priority QThreads while keeping ProgressLoggerGui in the GUI thread. Progress and log signals are delivered through queued Qt connections. Cancellation remains available while a synchronous TTS request is running. The abort flags used across threads are atomic and the abort signal is sent through a direct connection. Worker objects and threads are deleted through the standard finished / deleteLater lifecycle. Talk generation now passes all selected folders to one worker and processes them sequentially, emitting the final done signal only once. This preserves multiple-folder selection without starting work in the GUI thread. Change-Id: I58aa66333d43e1be249c84e0cf46c17c119a8360
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
/***************************************************************************
|
|
* __________ __ ___.
|
|
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
* \/ \/ \/ \/ \/
|
|
*
|
|
* Copyright (C) 2007 by Dominik Wenger
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
* KIND, either express or implied.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef CREATEVOICEWINDOW_H
|
|
#define CREATEVOICEWINDOW_H
|
|
|
|
#include <QDialog>
|
|
#include <QPointer>
|
|
#include <QThread>
|
|
#include <QUrl>
|
|
|
|
#include "ui_createvoicefrm.h"
|
|
#include "progressloggergui.h"
|
|
#include "voicefile.h"
|
|
|
|
|
|
class CreateVoiceWindow : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
CreateVoiceWindow(QWidget *parent);
|
|
void setProxy(QUrl proxy){m_proxy = proxy;}
|
|
|
|
public slots:
|
|
void accept(void);
|
|
void change(void);
|
|
void updateSettings(void);
|
|
void saveSettings(void);
|
|
|
|
signals:
|
|
void settingsUpdated(void);
|
|
|
|
private:
|
|
void changeEvent(QEvent *event);
|
|
QPointer<VoiceFileCreator> voicecreator;
|
|
QPointer<QThread> workerThread;
|
|
Ui::CreateVoiceFrm ui;
|
|
ProgressLoggerGui* logger;
|
|
QUrl m_proxy;
|
|
};
|
|
|
|
#endif
|