diff -Nru jovie-4.11.1/debian/changelog jovie-4.11.2/debian/changelog --- jovie-4.11.1/debian/changelog 2013-09-06 21:04:57.000000000 +0000 +++ jovie-4.11.2/debian/changelog 2013-09-30 12:56:49.000000000 +0000 @@ -1,3 +1,9 @@ +jovie (4:4.11.2-0ubuntu1) saucy; urgency=low + + * New upstream bugfix release + + -- Jonathan Riddell Mon, 30 Sep 2013 13:56:47 +0100 + jovie (4:4.11.1-0ubuntu1) saucy; urgency=low * New upstream bugfix release. diff -Nru jovie-4.11.1/debian/control jovie-4.11.2/debian/control --- jovie-4.11.1/debian/control 2013-09-06 21:04:57.000000000 +0000 +++ jovie-4.11.2/debian/control 2013-09-30 12:56:49.000000000 +0000 @@ -7,7 +7,7 @@ Eshat Cakar Build-Depends: kde-sc-dev-latest (>= 4:4.10), cmake, debhelper (>= 8.0), pkg-kde-tools (>= 0.12), - kdelibs5-dev (>= 4:4.11.1), + kdelibs5-dev (>= 4:4.11.2), libspeechd-dev Standards-Version: 3.9.3 Homepage: http://accessibility.kde.org/developer/kttsd diff -Nru jovie-4.11.1/filters/talkerchooser/talkerchooserproc.cpp jovie-4.11.2/filters/talkerchooser/talkerchooserproc.cpp --- jovie-4.11.1/filters/talkerchooser/talkerchooserproc.cpp 2013-06-28 17:39:54.194224363 +0000 +++ jovie-4.11.2/filters/talkerchooser/talkerchooserproc.cpp 2013-09-26 19:25:01.597238295 +0000 @@ -101,16 +101,6 @@ } // Set the talker. - // kDebug() << "TalkerChooserProc::convert: setting lang " << m_languageCode << - // " gender " << m_gender << " synth " << m_synth << - // " volume " << m_volume << " rate " << m_rate << endl; - // Only override the language if user specified a language code. - if (!m_chosenTalkerCode.language().isEmpty()) - talkerCode->setLanguage(m_chosenTalkerCode.language()); - //talkerCode->setVoice(m_chosenTalkerCode.voice()); - //talkerCode->setGender(m_chosenTalkerCode.gender()); - //talkerCode->setPlugInName(m_chosenTalkerCode.plugInName()); - //talkerCode->setVolume(m_chosenTalkerCode.volume()); - //talkerCode->setRate(m_chosenTalkerCode.rate()); + *talkerCode = m_chosenTalkerCode; return inputText; } diff -Nru jovie-4.11.1/filters/xhtml2ssml/xmlelement.h jovie-4.11.2/filters/xhtml2ssml/xmlelement.h --- jovie-4.11.1/filters/xhtml2ssml/xmlelement.h 2013-06-28 17:39:54.195224369 +0000 +++ jovie-4.11.2/filters/xhtml2ssml/xmlelement.h 2013-09-26 19:25:01.598238288 +0000 @@ -35,7 +35,7 @@ class XMLElement { public: XMLElement(); - XMLElement(const QString &name); + explicit XMLElement(const QString &name); ~XMLElement(); /// Copy constructor diff -Nru jovie-4.11.1/jovie/appdata.h jovie-4.11.2/jovie/appdata.h --- jovie-4.11.1/jovie/appdata.h 2013-06-28 17:39:54.196224375 +0000 +++ jovie-4.11.2/jovie/appdata.h 2013-09-26 19:25:01.598238288 +0000 @@ -42,7 +42,7 @@ * Constructs a new AppData object for the given DBUS AppId. * @param appId DBUS sender id. */ - AppData(const QString& appId); + explicit AppData(const QString& appId); /** * Destructor. diff -Nru jovie-4.11.1/jovie/filtermgr.h jovie-4.11.2/jovie/filtermgr.h --- jovie-4.11.1/jovie/filtermgr.h 2013-06-28 17:39:54.196224375 +0000 +++ jovie-4.11.2/jovie/filtermgr.h 2013-09-26 19:25:01.598238288 +0000 @@ -45,7 +45,7 @@ /** * Constructor. */ - FilterMgr(QObject *parent = 0); + explicit FilterMgr(QObject *parent = 0); /** * Destructor. diff -Nru jovie-4.11.1/jovie/jovietrayicon.cpp jovie-4.11.2/jovie/jovietrayicon.cpp --- jovie-4.11.1/jovie/jovietrayicon.cpp 2013-06-28 17:39:54.197224381 +0000 +++ jovie-4.11.2/jovie/jovietrayicon.cpp 2013-09-26 19:25:01.598238288 +0000 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -149,8 +150,10 @@ void JovieTrayIcon::aboutSelected() { - KAboutApplicationDialog aboutDlg(KGlobal::mainComponent().aboutData()); - aboutDlg.exec(); + QPointer aboutDlg = + new KAboutApplicationDialog(KGlobal::mainComponent().aboutData()); + aboutDlg->exec(); + delete aboutDlg; } void JovieTrayIcon::helpSelected() diff -Nru jovie-4.11.1/jovie/jovietrayicon.h jovie-4.11.2/jovie/jovietrayicon.h --- jovie-4.11.1/jovie/jovietrayicon.h 2013-06-28 17:39:54.197224381 +0000 +++ jovie-4.11.2/jovie/jovietrayicon.h 2013-09-26 19:25:01.598238288 +0000 @@ -38,7 +38,7 @@ Q_OBJECT public: - JovieTrayIcon(QWidget *parent=0); + explicit JovieTrayIcon(QWidget *parent=0); ~JovieTrayIcon(); protected Q_SLOTS: diff -Nru jovie-4.11.1/jovie/speaker.cpp jovie-4.11.2/jovie/speaker.cpp --- jovie-4.11.1/jovie/speaker.cpp 2013-08-28 17:09:13.442759487 +0000 +++ jovie-4.11.2/jovie/speaker.cpp 2013-09-26 19:25:01.598238288 +0000 @@ -180,7 +180,6 @@ // kDebug() << "TalkerListModel::loadTalkerCodesFromConfig: talkerIDsList = " << talkerIDsList; if (!talkerIDsList.isEmpty()) { - TalkerCode defaultTalker; QStringList::ConstIterator itEnd = talkerIDsList.constEnd(); for (QStringList::ConstIterator it = talkerIDsList.constBegin(); it != itEnd; ++it) { @@ -195,6 +194,7 @@ //tc.setId(talkerID); // do something with the talker codes read in } + currentTalker = defaultTalker; q->setOutputModule(defaultTalker.outputModule()); q->setLanguage(defaultTalker.language()); @@ -228,6 +228,18 @@ KConfig *config; Speaker *q; + + /** + * Keeps track of the default talker in the configuration file + * for easy switching back to it. + */ + TalkerCode defaultTalker; + + /** + * Keeps track of the current talker information to give back to any users + * and to know if we need to change the talker based on a filter's results. + */ + TalkerCode currentTalker; }; /* Public Methods ==========================================================*/ @@ -362,6 +374,7 @@ AppData* appData = getAppData(appId); KSpeech::JobPriority priority = appData->defaultPriority(); + TalkerCode talkerCode = d->currentTalker; //kDebug() << "Speaker::say priority = " << priority; //kDebug() << "Running: Speaker::say appId = " << appId << " text = " << text; //QString talker = appData->defaultTalker(); @@ -387,9 +400,21 @@ } if (appData->filteringOn()) { - filteredText = d->filterMgr->convert(text, NULL, appId); + filteredText = d->filterMgr->convert(text, &talkerCode, appId); } + // Change the voice to the talkerCode from the filter if needed. + if (talkerCode != d->currentTalker) + { + kDebug() << "Changing language from " << d->currentTalker.getTranslatedDescription() << + " to " << talkerCode.getTranslatedDescription(); + setOutputModule(talkerCode.outputModule()); + setLanguage(TalkerCode::languageCodeToLanguage(talkerCode.language())); + setVoiceType(talkerCode.voiceType()); + setVolume(talkerCode.volume()); + setSpeed(talkerCode.rate()); + setPitch(talkerCode.pitch()); + } emit newJobFiltered(text, filteredText); while (jobNum == -1 && d->connection != NULL) @@ -509,75 +534,81 @@ { if (d->connection) { spd_set_voice_rate(d->connection, speed); + d->currentTalker.setRate(speed); } } int Speaker::speed() { - return 0; + return d->currentTalker.rate(); } void Speaker::setPitch(int pitch) { if (d->connection) { spd_set_voice_pitch(d->connection, pitch); + d->currentTalker.setPitch(pitch); } } int Speaker::pitch() { - return 0; + return d->currentTalker.pitch(); } void Speaker::setVolume(int volume) { if (d->connection) { spd_set_volume(d->connection, volume); + d->currentTalker.setVolume(volume); } } int Speaker::volume() { - return 0; + return d->currentTalker.volume(); } void Speaker::setOutputModule(const QString & module) { if (d->connection) { int result = spd_set_output_module(d->connection, module.toUtf8().data()); + d->currentTalker.setOutputModule(module); // discard result for now, TODO: add error reporting } } QString Speaker::outputModule() { - return QString(); + return d->currentTalker.outputModule(); } void Speaker::setLanguage(const QString & language) { if (d->connection) { int result = spd_set_language(d->connection, language.toUtf8().data()); + d->currentTalker.setLanguage(language); // discard result for now, TODO: add error reporting } } QString Speaker::language() { - return QString(); + return d->currentTalker.language(); } void Speaker::setVoiceType(int voiceType) { if (d->connection) { int result = spd_set_voice_type(d->connection, SPDVoiceType(voiceType)); + d->currentTalker.setVoiceType(voiceType); // discard result for now, TODO: add error reporting } } int Speaker::voiceType() { - return 0; + return d->currentTalker.voiceType(); } void Speaker::stop() diff -Nru jovie-4.11.1/jovie/speechjob.h jovie-4.11.2/jovie/speechjob.h --- jovie-4.11.1/jovie/speechjob.h 2013-06-28 17:39:54.243224658 +0000 +++ jovie-4.11.2/jovie/speechjob.h 2013-09-26 19:25:01.598238288 +0000 @@ -55,7 +55,7 @@ Q_PROPERTY(QByteArray serialize READ serialize) public: - SpeechJob(KSpeech::JobPriority priority=KSpeech::jpText); + explicit SpeechJob(KSpeech::JobPriority priority=KSpeech::jpText); ~SpeechJob(); /** Job number. */ diff -Nru jovie-4.11.1/jovie/ssmlconvert.h jovie-4.11.2/jovie/ssmlconvert.h --- jovie-4.11.1/jovie/ssmlconvert.h 2013-06-28 17:39:54.244224664 +0000 +++ jovie-4.11.2/jovie/ssmlconvert.h 2013-09-26 19:25:01.598238288 +0000 @@ -43,7 +43,7 @@ public: /** Constructors */ SSMLConvert(); - SSMLConvert(const QStringList &talkers); + explicit SSMLConvert(const QStringList &talkers); /** Destructor */ virtual ~SSMLConvert(); diff -Nru jovie-4.11.1/kcmkttsmgr/kttsjobmgr.h jovie-4.11.2/kcmkttsmgr/kttsjobmgr.h --- jovie-4.11.1/kcmkttsmgr/kttsjobmgr.h 2013-06-28 17:39:54.247224682 +0000 +++ jovie-4.11.2/kcmkttsmgr/kttsjobmgr.h 2013-09-26 19:25:01.599238281 +0000 @@ -48,7 +48,7 @@ { Q_OBJECT public: - KttsJobMgr(QWidget *parent = 0); + explicit KttsJobMgr(QWidget *parent = 0); virtual ~KttsJobMgr(); /** apply current settings, i.e. tell speech-dispatcher what to do */ diff -Nru jovie-4.11.1/libkttsd/selectlanguagedlg.h jovie-4.11.2/libkttsd/selectlanguagedlg.h --- jovie-4.11.1/libkttsd/selectlanguagedlg.h 2013-06-28 17:39:54.248224688 +0000 +++ jovie-4.11.2/libkttsd/selectlanguagedlg.h 2013-09-26 19:25:01.599238281 +0000 @@ -61,7 +61,7 @@ * @param blankMode If 1, a blank row is displayed in the * list and user may choose it. */ - SelectLanguageDlg( + explicit SelectLanguageDlg( QWidget* parent = 0, const QString& caption = i18n("Select Language"), const QStringList& languageCodes = QStringList(), diff -Nru jovie-4.11.1/libkttsd/selecttalkerdlg.cpp jovie-4.11.2/libkttsd/selecttalkerdlg.cpp --- jovie-4.11.1/libkttsd/selecttalkerdlg.cpp 2013-06-28 17:39:54.248224688 +0000 +++ jovie-4.11.2/libkttsd/selecttalkerdlg.cpp 2013-09-26 19:25:01.599238281 +0000 @@ -115,7 +115,7 @@ connect(m_widget->useSpecificTalkerRadioButton, SIGNAL(clicked()), this, SLOT(configChanged())); - connect(m_widget->talkersView, SIGNAL(clicked()), + connect(m_widget->talkersView, SIGNAL(clicked(QModelIndex)), this, SLOT(slotTalkersView_clicked())); m_widget->talkersView->setMinimumHeight( 120 ); @@ -141,6 +141,7 @@ QModelIndex modelIndex = m_widget->talkersView->currentIndex(); if (!modelIndex.isValid()) return; if (!m_widget->useSpecificTalkerRadioButton->isChecked()) return; + m_talkerCode = m_talkerListModel->getRow(modelIndex.row()); configChanged(); } diff -Nru jovie-4.11.1/libkttsd/selecttalkerdlg.h jovie-4.11.2/libkttsd/selecttalkerdlg.h --- jovie-4.11.1/libkttsd/selecttalkerdlg.h 2013-06-28 17:39:54.248224688 +0000 +++ jovie-4.11.2/libkttsd/selecttalkerdlg.h 2013-09-26 19:25:01.599238281 +0000 @@ -53,7 +53,7 @@ * KTTSD. If false, lists Talkers in the KTTSMgr Talker tab * (which may not yet have been Applied). */ - SelectTalkerDlg( + explicit SelectTalkerDlg( QWidget* parent = 0, const char* name = "selecttalkerdialog", const QString& caption = i18n("Select Talker"), diff -Nru jovie-4.11.1/libkttsd/talkercode.cpp jovie-4.11.2/libkttsd/talkercode.cpp --- jovie-4.11.1/libkttsd/talkercode.cpp 2013-06-28 17:39:54.248224688 +0000 +++ jovie-4.11.2/libkttsd/talkercode.cpp 2013-09-26 19:25:01.599238281 +0000 @@ -106,19 +106,27 @@ */ QString TalkerCode::getTranslatedDescription() const { - QString code = m_language; - bool prefer; - //QString fullLangCode = m_language; - //if (!fullLangCode.isEmpty()) code = languageCodeToLanguage( fullLangCode ); - // TODO: The PlugInName is always English. Need a way to convert this to a translated - // name (possibly via DesktopEntryNameToName, but to do that, we need the desktopEntryName - // from the config file). - if (!m_outputModule.isEmpty()) code += QLatin1Char( ' ' ) + stripPrefer(m_outputModule, prefer); - //if (!m_voiceType.isEmpty()) code += ' ' + stripPrefer(m_voiceType, prefer); - //if (!m_volume.isEmpty()) code += ' ' + translatedVolume(stripPrefer(m_volume, prefer)); - //if (!m_rate.isEmpty()) code += ' ' + translatedRate(stripPrefer(m_rate, prefer)); - code = code.trimmed(); - if (code.isEmpty()) code = i18nc("Default language code", "default"); + QString code; + if (!m_name.isEmpty()) + { + code = m_name; + } + else + { + code = m_language; + bool prefer; + QString fullLangCode = m_language; + if (!fullLangCode.isEmpty()) code = languageCodeToLanguage( fullLangCode ); + // TODO: The PlugInName is always English. Need a way to convert this to a translated + // name (possibly via DesktopEntryNameToName, but to do that, we need the desktopEntryName + // from the config file). + if (!m_outputModule.isEmpty()) code += QLatin1Char( ' ' ) + stripPrefer(m_outputModule, prefer); + code += QLatin1Char(' ') + translatedVoiceType(m_voiceType); + code += QString(QLatin1String(" volume: %1 rate: %2")).arg(m_volume).arg(m_rate); + code = code.trimmed(); + } + if (code.isEmpty()) + code = i18nc("Default language code", "default"); return code; } @@ -335,3 +343,23 @@ return code; } } + +bool TalkerCode::operator==(TalkerCode &other) const +{ + return m_language == other.language() && + m_voiceType == other.voiceType() && + m_rate == other.rate() && + m_volume == other.volume() && + m_pitch == other.pitch() && + m_outputModule == other.outputModule(); +} + +bool TalkerCode::operator!=(TalkerCode &other) const +{ + return m_language != other.language() || + m_voiceType != other.voiceType() || + m_rate != other.rate() || + m_volume != other.volume() || + m_pitch != other.pitch() || + m_outputModule != other.outputModule(); +} diff -Nru jovie-4.11.1/libkttsd/talkercode.h jovie-4.11.2/libkttsd/talkercode.h --- jovie-4.11.1/libkttsd/talkercode.h 2013-06-28 17:39:54.248224688 +0000 +++ jovie-4.11.2/libkttsd/talkercode.h 2013-09-26 19:25:01.599238281 +0000 @@ -50,6 +50,9 @@ */ ~TalkerCode(); + bool operator==(TalkerCode &other) const; + bool operator!=(TalkerCode &other) const; + typedef QList TalkerCodeList; /**