Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-speech for openSUSE:Factory checked in at 2025-10-13 17:23:50 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-speech (Old) and /work/SRC/openSUSE:Factory/.qt6-speech.new.18484 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-speech" Mon Oct 13 17:23:50 2025 rev:25 rq:1310367 version:6.10.0 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-speech/qt6-speech.changes 2025-08-29 18:35:55.771918589 +0200 +++ /work/SRC/openSUSE:Factory/.qt6-speech.new.18484/qt6-speech.changes 2025-10-13 17:27:08.522808128 +0200 @@ -1,0 +2,6 @@ +Tue Oct 7 08:53:30 UTC 2025 - Christophe Marin <[email protected]> + +- Update to 6.10.0 + * https://www.qt.io/blog/qt-6.10-released + +------------------------------------------------------------------- Old: ---- qtspeech-everywhere-src-6.9.2.tar.xz New: ---- qtspeech-everywhere-src-6.10.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-speech.spec ++++++ --- /var/tmp/diff_new_pack.v1O1lq/_old 2025-10-13 17:27:09.486848440 +0200 +++ /var/tmp/diff_new_pack.v1O1lq/_new 2025-10-13 17:27:09.490848607 +0200 @@ -16,8 +16,8 @@ # -%define real_version 6.9.2 -%define short_version 6.9 +%define real_version 6.10.0 +%define short_version 6.10 %define tar_name qtspeech-everywhere-src %define tar_suffix %{nil} # @@ -31,10 +31,10 @@ %bcond_without flite %endif Name: qt6-speech%{?pkg_suffix} -Version: 6.9.2 +Version: 6.10.0 Release: 0 Summary: Qt 6 TextToSpeech Library and Plugin -License: LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only +License: GPL-2.0-only OR LGPL-3.0-only OR GPL-3.0-only URL: https://www.qt.io Source0: https://download.qt.io/official_releases/qt/%{short_version}/%{real_version}%{tar_suffix}/submodules/%{tar_name}-%{real_version}%{tar_suffix}.tar.xz %if %{with flite} @@ -134,7 +134,7 @@ %{_qt6_includedir}/QtTextToSpeech/ %{_qt6_libdir}/libQt6TextToSpeech.prl %{_qt6_libdir}/libQt6TextToSpeech.so -%{_qt6_metatypesdir}/qt6texttospeech_*_metatypes.json +%{_qt6_metatypesdir}/qt6texttospeech_metatypes.json %{_qt6_mkspecsdir}/modules/qt_lib_texttospeech.pri %{_qt6_pkgconfigdir}/Qt6TextToSpeech.pc %exclude %{_qt6_includedir}/QtTextToSpeech/%{real_version} ++++++ qtspeech-everywhere-src-6.9.2.tar.xz -> qtspeech-everywhere-src-6.10.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/.cmake.conf new/qtspeech-everywhere-src-6.10.0/.cmake.conf --- old/qtspeech-everywhere-src-6.9.2/.cmake.conf 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/.cmake.conf 2025-10-02 03:55:33.000000000 +0200 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.9.2") +set(QT_REPO_MODULE_VERSION "6.10.0") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_AS_CONST=1") list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_FOREACH=1") list(APPEND QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/.tag new/qtspeech-everywhere-src-6.10.0/.tag --- old/qtspeech-everywhere-src-6.9.2/.tag 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/.tag 2025-10-02 03:55:33.000000000 +0200 @@ -1 +1 @@ -293dc229f2cd86b16fc486e4253725a943cadf83 +16bc9d9b74145b17e68529ca872a81f5b8a679d5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/dependencies.yaml new/qtspeech-everywhere-src-6.10.0/dependencies.yaml --- old/qtspeech-everywhere-src-6.9.2/dependencies.yaml 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/dependencies.yaml 2025-10-02 03:55:33.000000000 +0200 @@ -1,10 +1,10 @@ dependencies: ../qtbase: - ref: 6f0d27d2e4ba5fa6562f738aaaf8eaf98ebf51e7 + ref: 5a8637e4516bc48a0b3f4b5ec3b18618b92e7222 required: true ../qtdeclarative: - ref: b653aebb2175203d86199b1d320fd10f939df3fc + ref: 7e0ab1d98c159c9f4c9afab78b43e7c70f449e41 required: false ../qtmultimedia: - ref: 36207ed2b30cbe4e3397dfa488c4267f633de58a + ref: 9f1cc9b35c0916084f6835f78b665a3b4e3fe4f9 required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/examples/speech/hello_speak/mainwindow.cpp new/qtspeech-everywhere-src-6.10.0/examples/speech/hello_speak/mainwindow.cpp --- old/qtspeech-everywhere-src-6.9.2/examples/speech/hello_speak/mainwindow.cpp 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/examples/speech/hello_speak/mainwindow.cpp 2025-10-02 03:55:33.000000000 +0200 @@ -182,3 +182,8 @@ ui.voice->setCurrentIndex(ui.voice->count() - 1); } } + +MainWindow::~MainWindow() +{ + m_speech->disconnect(this); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/examples/speech/hello_speak/mainwindow.h new/qtspeech-everywhere-src-6.10.0/examples/speech/hello_speak/mainwindow.h --- old/qtspeech-everywhere-src-6.9.2/examples/speech/hello_speak/mainwindow.h 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/examples/speech/hello_speak/mainwindow.h 2025-10-02 03:55:33.000000000 +0200 @@ -14,6 +14,7 @@ Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); + ~MainWindow(); public slots: void setRate(int); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/examples/speech/quickspeech/Main.qml new/qtspeech-everywhere-src-6.10.0/examples/speech/quickspeech/Main.qml --- old/qtspeech-everywhere-src-6.9.2/examples/speech/quickspeech/Main.qml 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/examples/speech/quickspeech/Main.qml 2025-10-02 03:55:33.000000000 +0200 @@ -69,14 +69,12 @@ text: qsTr("Speak") enabled: [TextToSpeech.Paused, TextToSpeech.Ready].includes(tts.state) onClicked: { -//! [say0] let voices = tts.availableVoices() tts.voice = voices[voicesComboBox.currentIndex] -//! [say1] tts.say(input.text) } } -//! [say1] +//! [say0] //! [pause] Button { text: qsTr("Pause") @@ -93,11 +91,13 @@ visible: tts.engineCapabilities & TextToSpeech.Capabilities.PauseResume } //! [resume] +//! [stop] Button { text: qsTr("Stop") enabled: [TextToSpeech.Speaking, TextToSpeech.Paused].includes(tts.state) onClicked: tts.stop() } +//! [stop] } GridLayout { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/examples/speech/quickspeech/doc/src/quickspeech.qdoc new/qtspeech-everywhere-src-6.10.0/examples/speech/quickspeech/doc/src/quickspeech.qdoc --- old/qtspeech-everywhere-src-6.9.2/examples/speech/quickspeech/doc/src/quickspeech.qdoc 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/examples/speech/quickspeech/doc/src/quickspeech.qdoc 2025-10-02 03:55:33.000000000 +0200 @@ -15,15 +15,14 @@ can be used in a \l{Qt Quick} application to read out text and to control the speech. - The example uses \l{Qt Quick Controls} to provide controls for the speech's pitch, - volume, and rate. It also lets the user select an engine, a language, and a voice. + The example uses \l{Qt Quick Controls} to provide controls for the speech's + pitch, volume, and rate. It also lets the user select an engine, a + language, and a voice. \section1 Initializing a TextToSpeech First, we initialize the text to speech object \c{tts}: - \quotefromfile quickspeech/Main.qml - \skipto TextToSpeech { - \printuntil rate: rateSlider.value + \snippet quickspeech/Main.qml initialize \section1 Getting the status @@ -31,20 +30,19 @@ Switch cases are used to update the Label \c statusLabel in the footer. - \skipto onStateChanged: updateStateLabel(state) - \printuntil } + \snippet quickspeech/Main.qml stateChanged \section1 Highlighting words as they are spoken The TextArea \c input is used to get the text to input and the - \l{TextToSpeech::sayingWord}{onSayingWord} signal as the trigger and also to know - the position to highlight words as they are spoken. + \l{TextToSpeech::sayingWord}{onSayingWord} signal as the trigger and also + to know the position to highlight words as they are spoken. - \skipto onSayingWord: - \printuntil input.select(start, start + length) + \snippet quickspeech/Main.qml sayingWord The TextArea \c input is declared here: + \quotefromfile quickspeech/Main.qml \skipto ColumnLayout { \printuntil } @@ -57,23 +55,20 @@ A \l Button is created labeled "Speak". It is enabled if \c tts's state property is either \l{QTextToSpeech::}{Paused} or \l{QTextToSpeech::}{Ready}. - - \skipto RowLayout - \printto onClicked: { - When the button is clicked, the available voices on the target devices are retrieved, and \c tts.voice is set to the currently selected voice of \c voicesComboBox. Then TextToSpeech::say() is called and is passed the text in the \c inputbox. - \printuntil } + \snippet quickspeech/Main.qml say0 \section1 The pause, resume, and stop buttons These buttons are similar in implementation to the \c Speak button: - \skipto Button { - \printto GridLayout { + \snippet quickspeech/Main.qml pause + \snippet quickspeech/Main.qml resume + \snippet quickspeech/Main.qml stop \section1 Selecting text to speech options @@ -91,20 +86,21 @@ The \l{ComboBox::activated}{onActivated} triggers assigning tts.engine the current text at the ComboBoxes current index. - \skipto Text { + \skipto Label { \printuntil updateVoices() + \printto Label { The last two lines in the above code snippet show that the available locales and voices are updated at this point as well, as they are dependent on the selected engine. Those functions are covered in a \l{Updating available options}{following section}. - The \c localesComboBox is implemented the same way as \c engineComboBox, but without - updating the available engines. + The \c localesComboBox is implemented the same way as \c engineComboBox, but + without updating the available engines. \printuntil id: voicesComboBox - \printto Text + \printto Label \section2 Selecting volume, pitch, and rate @@ -118,7 +114,8 @@ once the root ApplicationWindow has been instantiated. \list - \li The \c enginesComboBox index is set to the currently set engine of \c{tts}. + \li The \c enginesComboBox index is set to the currently set engine of + \c{tts}. \li The available locales and voices are updated. \li The current state of \c tts is signaled. \endlist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/android/jar/src/org/qtproject/qt/android/speech/QtTextToSpeech.java new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/android/jar/src/org/qtproject/qt/android/speech/QtTextToSpeech.java --- old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/android/jar/src/org/qtproject/qt/android/speech/QtTextToSpeech.java 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/android/jar/src/org/qtproject/qt/android/speech/QtTextToSpeech.java 2025-10-02 03:55:33.000000000 +0200 @@ -9,10 +9,8 @@ import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.speech.tts.TextToSpeech; -import android.speech.tts.TextToSpeech.Engine; import android.speech.tts.TextToSpeech.OnInitListener; import android.speech.tts.UtteranceProgressListener; -import android.os.Build; import android.os.Bundle; import android.util.Log; import java.lang.Float; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/sapi/qtexttospeech_sapi.cpp new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/sapi/qtexttospeech_sapi.cpp --- old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/sapi/qtexttospeech_sapi.cpp 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/sapi/qtexttospeech_sapi.cpp 2025-10-02 03:55:33.000000000 +0200 @@ -372,9 +372,26 @@ qWarning() << "Could not convert language attribute to LCID"; return QLocale(); } + + // Windows Vista+ + WCHAR name[LOCALE_NAME_MAX_LENGTH] = {}; + if (LCIDToLocaleName(locale, name, LOCALE_NAME_MAX_LENGTH, 0)) + return QLocale(QString::fromWCharArray(name)); + + // Fallback to GetLocaleInfoW const int nchars = GetLocaleInfoW(locale, LOCALE_SISO639LANGNAME, NULL, 0); QVarLengthArray<wchar_t, 12> languageCode(nchars); GetLocaleInfoW(locale, LOCALE_SISO639LANGNAME, languageCode.data(), nchars); + + // Use country code when available + const int countryCodeSize = GetLocaleInfoW(locale, LOCALE_SISO3166CTRYNAME, NULL, 0); + if (countryCodeSize > 0) { + QVarLengthArray<wchar_t, 12> countryCode(countryCodeSize); + GetLocaleInfoW(locale, LOCALE_SISO3166CTRYNAME, countryCode.data(), countryCodeSize); + return QLocale(u"%1_%2"_s.arg(QString::fromWCharArray(languageCode.data()), + QString::fromWCharArray(countryCode.data()))); + } + return QLocale(QString::fromWCharArray(languageCode.data())); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt.cpp new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt.cpp --- old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt.cpp 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt.cpp 2025-10-02 03:55:33.000000000 +0200 @@ -360,8 +360,9 @@ emit sayingWord(d->currentBoundary->text, d->currentBoundary->beginIndex, d->currentBoundary->endIndex - d->currentBoundary->beginIndex + 1); ++d->currentBoundary; - const qint64 msecsToNext = qMax((d->currentBoundary->startTime - elapsed) / 1000, 0); + if (d->audioSource && d->currentBoundary != d->boundaries.constEnd()) { + const qint64 msecsToNext = qMax((d->currentBoundary->startTime - elapsed) / 1000, 0); d->boundaryTimer.start(msecsToNext, Qt::PreciseTimer, this); } else { d->boundaryTimer.stop(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp --- old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.cpp 2025-10-02 03:55:33.000000000 +0200 @@ -60,7 +60,6 @@ */ AudioSource::~AudioSource() { - Q_ASSERT(ref == 0); close(); } @@ -159,31 +158,39 @@ const int silenceDuration = audioFormat.sampleRate() / 50; const short *sample = reinterpret_cast<short*>(pbyte); const qsizetype sampleCount = maxlen / sizeof(short); - if (sampleCount < silenceDuration) - break; - qint64 silenceCount = 0; + + const bool isInitialPauseRequest = !m_pauseDetectionSilenceCount.has_value(); + if (isInitialPauseRequest) + m_pauseDetectionSilenceCount = 0; + for (qint64 index = 0; index < sampleCount; ++index) { if (qAbs(sample[index]) < 10) { - ++silenceCount; - } else if (silenceCount > silenceDuration) { - // long enough silence found, only provide the data until we are in the - // silence. If the silence is at the beginning of our buffer, start from - // there, otherwise play a bit of silence now. - if (index != silenceCount) - silenceCount /= 2; - - maxlen = (index - silenceCount) * 2; - // The next attempt to pull data will return nothing, and the audio sink - // will move to idle state. + *m_pauseDetectionSilenceCount += 1; + } else { + *m_pauseDetectionSilenceCount = 0; + continue; + } + + if (*m_pauseDetectionSilenceCount > silenceDuration) { + // long enough silence found, only provide the data until we are in the silence. + + // we will still try to play at least half of the silent part + const int silentSamplesToPlay = silenceDuration / 2; + maxlen = index > silentSamplesToPlay ? (index - silentSamplesToPlay) * sizeof(short) + : index * sizeof(short); + m_pause = Paused; + m_pauseDetectionSilenceCount = std::nullopt; break; } else { - silenceCount = 0; + *m_pauseDetectionSilenceCount = 0; } } // no silence found - stop after this chunk - if (m_pause != Paused) + if (m_pause != Paused) { + m_pauseDetectionSilenceCount = std::nullopt; m_pause = Paused; + } break; } case Paused: @@ -199,7 +206,7 @@ // We emptied the buffer, so schedule fetching more if (available <= maxlen) - QTimer::singleShot(0, this, &AudioSource::fetchMore); + fetchMore(); else m_bufferOffset += maxlen; @@ -234,25 +241,6 @@ return ioPos >= ioSize; } -HRESULT AudioSource::QueryInterface(REFIID riid, VOID **ppvInterface) -{ - if (!ppvInterface) - return E_POINTER; - - if (riid == __uuidof(IUnknown)) { - *ppvInterface = static_cast<IUnknown*>(static_cast<StreamReadyHandler *>(this)); - } else if (riid == __uuidof(StreamReadyHandler)) { - *ppvInterface = static_cast<StreamReadyHandler *>(this); - } else if (riid == __uuidof(BytesReadyHandler)) { - *ppvInterface = static_cast<BytesReadyHandler *>(this); - } else { - *ppvInterface = nullptr; - return E_NOINTERFACE; - } - AddRef(); - return S_OK; -} - /* Completion handler for synthesising the stream. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h --- old/qtspeech-everywhere-src-6.9.2/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/plugins/tts/winrt/qtexttospeech_winrt_audiosource.h 2025-10-02 03:55:33.000000000 +0200 @@ -10,6 +10,7 @@ #include <robuffer.h> #include <winrt/base.h> #include <QtCore/private/qfactorycacheregistration_p.h> +#include <QtCore/private/qcomobject_p.h> #include <windows.foundation.h> #include <windows.media.speechsynthesis.h> #include <windows.storage.streams.h> @@ -26,9 +27,7 @@ using StreamReadyHandler = IAsyncOperationCompletedHandler<SpeechSynthesisStream*>; using BytesReadyHandler = IAsyncOperationWithProgressCompletedHandler<IBuffer*, UINT32>; -class AudioSource : public QIODevice, - public StreamReadyHandler, - public BytesReadyHandler +class AudioSource final : public QIODevice, public QComObject<StreamReadyHandler, BytesReadyHandler> { Q_OBJECT public: @@ -82,18 +81,6 @@ return boundaries; } - // IUnknown - ULONG STDMETHODCALLTYPE AddRef() override { return ++ref; } - ULONG STDMETHODCALLTYPE Release() override - { - if (!--ref) { - delete this; - return 0; - } - return ref; - } - HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, VOID **ppvInterface) override; - // completion handler for synthesising the stream HRESULT STDMETHODCALLTYPE Invoke(IAsyncOperation<SpeechSynthesisStream*> *operation, AsyncStatus status) override; @@ -131,11 +118,10 @@ bool m_riffHeaderChecked = false; quint64 m_bytesRead = 0; quint64 m_pauseRequestedAt = 0; + std::optional<qint64> m_pauseDetectionSilenceCount; void populateBoundaries(); QList<Boundary> boundaries; - - ULONG ref = 1; }; QT_END_NAMESPACE diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/tts/doc/qttexttospeech.qdocconf new/qtspeech-everywhere-src-6.10.0/src/tts/doc/qttexttospeech.qdocconf --- old/qtspeech-everywhere-src-6.9.2/src/tts/doc/qttexttospeech.qdocconf 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/tts/doc/qttexttospeech.qdocconf 2025-10-02 03:55:33.000000000 +0200 @@ -21,6 +21,9 @@ ignoresince = 6.4 examplesinstallpath = speech +# Path to the root of qtspeech (for automatic linking to source code) +url.sources.rootdir = ../../.. + # Defines the name of the project. You cannot use operators (+, =, -) in # the name. Properties for this project are set using a qhp.<projectname>.property # format. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/src/tts/doc/src/qttexttospeech-index.qdoc new/qtspeech-everywhere-src-6.10.0/src/tts/doc/src/qttexttospeech-index.qdoc --- old/qtspeech-everywhere-src-6.9.2/src/tts/doc/src/qttexttospeech-index.qdoc 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/src/tts/doc/src/qttexttospeech-index.qdoc 2025-10-02 03:55:33.000000000 +0200 @@ -70,8 +70,10 @@ the \l{GNU General Public License, version 2}. See \l{Qt Licensing} for further details. +\omit Furthermore, Qt TextToSpeech in Qt \QtVersion may contain third party modules under the following permissive licenses: - \generatelist{groupsbymodule attributions-qtspeech} + \annotatedlist attributions-qtspeech +\endomit */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/tests/auto/qtexttospeech/BLACKLIST new/qtspeech-everywhere-src-6.10.0/tests/auto/qtexttospeech/BLACKLIST --- old/qtspeech-everywhere-src-6.9.2/tests/auto/qtexttospeech/BLACKLIST 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/tests/auto/qtexttospeech/BLACKLIST 2025-10-02 03:55:33.000000000 +0200 @@ -1,5 +1,6 @@ [pauseResume:darwin] macos-13 ci # QTBUG-108205 macos-15 arm ci # QTBUG-108205 +macos-26 arm ci # QTBUG-108205 [sayingWordWithPause:darwin] macos-13 ci # QTBUG-108205 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtspeech-everywhere-src-6.9.2/tests/auto/qtexttospeech/tst_qtexttospeech.cpp new/qtspeech-everywhere-src-6.10.0/tests/auto/qtexttospeech/tst_qtexttospeech.cpp --- old/qtspeech-everywhere-src-6.9.2/tests/auto/qtexttospeech/tst_qtexttospeech.cpp 2025-08-18 03:29:35.000000000 +0200 +++ new/qtspeech-everywhere-src-6.10.0/tests/auto/qtexttospeech/tst_qtexttospeech.cpp 2025-10-02 03:55:33.000000000 +0200 @@ -9,6 +9,7 @@ #include <QAudioFormat> #include <QAudioDevice> #include <QAudioBuffer> +#include <QElapsedTimer> #include <QOperatingSystemVersion> #include <QRegularExpression> #include <qttexttospeech-config.h>
