* Tools/speech/GSSpeechSynthesizer.m: Use object_getClass()

instead of isa. Make exitIfUnneeded: a class method. Reformat
code.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@36460 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2013-04-03 18:43:40 +00:00
parent 808e830952
commit c7f0cff48d
2 changed files with 85 additions and 66 deletions

View file

@ -1,3 +1,8 @@
2013-04-03 Fred Kiefer <FredKiefer@gmx.de>
* Tools/speech/GSSpeechSynthesizer.m: Use object_getClass()
instead of isa. Make exitIfUnneeded: a class method. Reformat code.
2013-04-03 Fred Kiefer <FredKiefer@gmx.de>
* Source/NSBitmapImageRep+GIF.m (-_bitmapIsGIF:): Prepare for

View file

@ -10,116 +10,130 @@ static int clients;
@implementation GSSpeechSynthesizer
+ (void)initialize
{
server = [[GSSpeechServer sharedServer] retain];
[[NSNotificationCenter defaultCenter]
server = [[GSSpeechServer sharedServer] retain];
[[NSNotificationCenter defaultCenter]
addObserver: self
selector: @selector(connectionDied:)
name: NSConnectionDidDieNotification
object: nil];
name: NSConnectionDidDieNotification
object: nil];
}
/**
* If the remote end exits before freeing the GSSpeechSynthesizer then we need
* to send it a -release message to make sure it dies.
*/
+ (void)connectionDied: (NSNotification*)aNotification
{
NSEnumerator *e = [[[aNotification object] localObjects] objectEnumerator];
for (NSObject *o = [e nextObject] ; nil != o ; o = [e nextObject])
{
if ([o isKindOfClass: self])
{
[o release];
}
}
NSEnumerator *e = [[[aNotification object] localObjects] objectEnumerator];
for (NSObject *o = [e nextObject] ; nil != o ; o = [e nextObject])
{
if ([o isKindOfClass: self])
{
[o release];
}
}
}
/**
* If no clients have been active for some time, kill the speech server to
* conserve resources.
*/
- (void)exitIfUnneeded: (NSTimer*)sender
+ (void)exitIfUnneeded: (NSTimer*)sender
{
if (clients == 0)
{
exit(0);
}
if (clients == 0)
{
exit(0);
}
}
- (id)initWithVoice: (NSString*)aVoice
{
clients++;
if (nil == (self = [super init])) { return nil; }
[self setVoice: currentVoice];
return self;
clients++;
if (nil == (self = [super init]))
{
return nil;
}
[self setVoice: currentVoice];
return self;
}
- (id)init
{
return [self initWithVoice: nil];
return [self initWithVoice: nil];
}
- (NSString*)voice
{
return currentVoice;
return currentVoice;
}
- (id)delegate
{
return delegate;
return delegate;
}
- (void)setDelegate: (id)aDelegate
{
// Either -retain or -release can throw an exception due to DO.
NS_DURING
aDelegate = [aDelegate retain];
NS_HANDLER
NS_ENDHANDLER
NS_DURING
[delegate release];
NS_HANDLER
NS_ENDHANDLER
delegate = aDelegate;
// Either -retain or -release can throw an exception due to DO.
NS_DURING
aDelegate = [aDelegate retain];
NS_HANDLER
NS_ENDHANDLER
NS_DURING
[delegate release];
NS_HANDLER
NS_ENDHANDLER
delegate = aDelegate;
}
- (void)setVoice: (NSString*)aVoice
{
if (nil == aVoice)
{
aVoice = [server defaultVoice];
}
ASSIGN(currentVoice, aVoice);
if (nil == aVoice)
{
aVoice = [server defaultVoice];
}
ASSIGN(currentVoice, aVoice);
}
- (BOOL)startSpeakingString: (NSString*)aString
{
[server setVoice: currentVoice];
return [server startSpeakingString: aString notifyWhenDone: self];
[server setVoice: currentVoice];
return [server startSpeakingString: aString notifyWhenDone: self];
}
- (void)didFinishSpeaking: (BOOL)didFinish
{
// Throw the delegate away if it is throwing exceptions during
// notification.
NS_DURING
[delegate speechSynthesizer: self didFinishSpeaking: didFinish];
NS_HANDLER
NS_DURING
id d = delegate;
delegate = nil;
[d release];
NS_HANDLER
NS_ENDHANDLER
NS_ENDHANDLER
// Throw the delegate away if it is throwing exceptions during
// notification.
NS_DURING
[delegate speechSynthesizer: self didFinishSpeaking: didFinish];
NS_HANDLER
NS_DURING
id d = delegate;
delegate = nil;
[d release];
NS_HANDLER
NS_ENDHANDLER
NS_ENDHANDLER
}
- (void)stopSpeaking
{
[server stopSpeaking];
[server stopSpeaking];
}
- (void)dealloc
{
clients--;
[currentVoice release];
if (clients == 0)
{
[NSTimer scheduledTimerWithTimeInterval: 600
target: isa
selector: @selector(exitIfUnneeded:)
userInfo: nil
repeats: NO];
}
[super dealloc];
clients--;
[currentVoice release];
if (clients == 0)
{
[NSTimer scheduledTimerWithTimeInterval: 600
target: object_getClass()
selector: @selector(exitIfUnneeded:)
userInfo: nil
repeats: NO];
}
[super dealloc];
}
@end