@ -9,46 +9,34 @@
# include "tts.h"
# include <QtDBus/QDBusConnection>
# include <QtDBus/QDBusConnectionInterface>
# include <QtDBus/QDBusInterface>
# include <QtDBus/QDBusReply>
# include <klocale.h>
# include <ktoolinvocation.h>
# include "pageviewutils.h"
# include "kspeechinterface.h"
/* Private storage. */
class OkularTTS : : Private
{
public :
Private ( )
Private ( OkularTTS * qq )
: q ( qq ) , kspeech ( 0 )
{
}
void setupIface ( ) ;
void teardownIface ( ) ;
OkularTTS * q ;
PageViewMessage * messageWindow ;
org : : kde : : KSpeech * kspeech ;
} ;
OkularTTS : : OkularTTS ( PageViewMessage * messageWindow , QObject * parent )
: QObject ( parent ) , d ( new Private )
void OkularTTS : : Private : : setupIface ( )
{
d - > messageWindow = messageWindow ;
}
OkularTTS : : ~ OkularTTS ( )
{
delete d ;
}
void OkularTTS : : say ( const QString & text )
{
if ( text . isEmpty ( ) )
if ( kspeech )
return ;
// Albert says is this ever necessary?
// we already attached on Part constructor
// If KTTSD not running, start it.
QDBusReply < bool > reply = QDBusConnection : : sessionBus ( ) . interface ( ) - > isServiceRegistered ( " org.kde.kttsd " ) ;
bool kttsdactive = false ;
@ -59,7 +47,7 @@ void OkularTTS::say( const QString &text )
QString error ;
if ( KToolInvocation : : startServiceByDesktopName ( " kttsd " , QStringList ( ) , & error ) )
{
d - > messageWindow - > display ( i18n ( " Starting KTTSD Failed: %1 " , error ) ) ;
messageWindow - > display ( i18n ( " Starting KTTSD Failed: %1 " , error ) ) ;
}
else
{
@ -69,9 +57,60 @@ void OkularTTS::say( const QString &text )
if ( kttsdactive )
{
// creating the connection to the kspeech interface
QDBusInterface kspeech ( " org.kde.kttsd " , " /KSpeech " , " org.kde.KSpeech " ) ;
kspeech . call ( " setApplicationName " , " Okular " ) ;
kspeech . call ( " say " , text , 0 ) ;
kspeech = new org : : kde : : KSpeech ( " org.kde.kttsd " , " /KSpeech " , QDBusConnection : : sessionBus ( ) ) ;
kspeech - > setApplicationName ( " Okular " ) ;
connect ( QDBusConnection : : sessionBus ( ) . interface ( ) , SIGNAL ( serviceUnregistered ( const QString & ) ) ,
q , SLOT ( slotServiceUnregistered ( const QString & ) ) ) ;
connect ( QDBusConnection : : sessionBus ( ) . interface ( ) , SIGNAL ( serviceOwnerChanged ( const QString & , const QString & , const QString & ) ) ,
q , SLOT ( slotServiceOwnerChanged ( const QString & , const QString & , const QString & ) ) ) ;
}
}
void OkularTTS : : Private : : teardownIface ( )
{
disconnect ( QDBusConnection : : sessionBus ( ) . interface ( ) , 0 , q , 0 ) ;
delete kspeech ;
kspeech = 0 ;
}
OkularTTS : : OkularTTS ( PageViewMessage * messageWindow , QObject * parent )
: QObject ( parent ) , d ( new Private ( this ) )
{
d - > messageWindow = messageWindow ;
}
OkularTTS : : ~ OkularTTS ( )
{
delete d ;
}
void OkularTTS : : say ( const QString & text )
{
if ( text . isEmpty ( ) )
return ;
d - > setupIface ( ) ;
if ( d - > kspeech )
{
d - > kspeech - > say ( text , 0 ) ;
}
}
void OkularTTS : : slotServiceUnregistered ( const QString & service )
{
if ( service = = QLatin1String ( " org.kde.kttsd " ) )
{
d - > teardownIface ( ) ;
}
}
void OkularTTS : : slotServiceOwnerChanged ( const QString & service , const QString & , const QString & newOwner )
{
if ( service = = QLatin1String ( " org.kde.kttsd " ) & & newOwner . isEmpty ( ) )
{
d - > teardownIface ( ) ;
}
}