Thread: [Xmeeting-svn] SF.net SVN: xmeeting:[46] XMeeting/trunk/Source
Brought to you by:
hfriederich
From: <hfr...@us...> - 2009-01-28 23:03:29
|
Revision: 46 http://xmeeting.svn.sourceforge.net/xmeeting/?rev=46&view=rev Author: hfriederich Date: 2009-01-28 23:03:23 +0000 (Wed, 28 Jan 2009) Log Message: ----------- Delay call until the framework is correctly initialized Modified Paths: -------------- XMeeting/trunk/Source/Application/XMCallAddressManager.h XMeeting/trunk/Source/Application/XMCallAddressManager.m XMeeting/trunk/Source/Framework/XMeeting.h XMeeting/trunk/Source/Framework/XMeeting.m Modified: XMeeting/trunk/Source/Application/XMCallAddressManager.h =================================================================== --- XMeeting/trunk/Source/Application/XMCallAddressManager.h 2009-01-27 00:38:26 UTC (rev 45) +++ XMeeting/trunk/Source/Application/XMCallAddressManager.h 2009-01-28 23:03:23 UTC (rev 46) @@ -37,6 +37,7 @@ @private NSMutableArray *callAddressProviders; id<XMCallAddress> activeCallAddress; + id<XMCallAddress> addressToCallWhenInitialized; } /** Modified: XMeeting/trunk/Source/Application/XMCallAddressManager.m =================================================================== --- XMeeting/trunk/Source/Application/XMCallAddressManager.m 2009-01-27 00:38:26 UTC (rev 45) +++ XMeeting/trunk/Source/Application/XMCallAddressManager.m 2009-01-28 23:03:23 UTC (rev 46) @@ -18,6 +18,7 @@ - (id)_init; - (void)_callEnded:(NSNotification *)notif; +- (void)_frameworkDidInitialize:(NSNotification *)notif; @end @@ -48,13 +49,15 @@ { callAddressProviders = [[NSMutableArray alloc] initWithCapacity:3]; activeCallAddress = nil; + addressToCallWhenInitialized = nil; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_callEnded:) - name:XMNotification_CallManagerDidNotStartCalling - object:nil]; + name:XMNotification_CallManagerDidNotStartCalling object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_callEnded:) - name:XMNotification_CallManagerDidClearCall - object:nil]; + name:XMNotification_CallManagerDidClearCall object:nil]; + // use the _didInitialize notification to ensure the location is properly set + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_frameworkDidInitialize:) + name:XMNotification_CallManagerDidEndSubsystemSetup object:nil]; return self; } @@ -62,11 +65,11 @@ { [callAddressProviders release]; - if (activeCallAddress != nil) { - [activeCallAddress release]; - activeCallAddress = nil; - } + [activeCallAddress release]; + [addressToCallWhenInitialized release]; + [[NSNotificationCenter defaultCenter] removeObserver:self]; + [super dealloc]; } @@ -204,6 +207,13 @@ return; } + if (!XMIsInitialized()) { + // framework not yet ready (e.g. if call initiated through a script) + [addressToCallWhenInitialized release]; + addressToCallWhenInitialized = [callAddress retain]; + return; + } + // check that protocol really is enabled XMCallProtocol callProtocol = [[callAddress addressResource] callProtocol]; XMLocation *activeLocation = [[XMPreferencesManager sharedInstance] activeLocation]; @@ -230,4 +240,15 @@ } } +- (void)_frameworkDidInitialize:(NSNotification *)notif +{ + if (addressToCallWhenInitialized != nil) { + id<XMCallAddress> addr = addressToCallWhenInitialized; + // set addressToCall... to nil -> addr inherits retain count + addressToCallWhenInitialized = nil; + [self makeCallToAddress:addr]; + [addr release]; + } +} + @end Modified: XMeeting/trunk/Source/Framework/XMeeting.h =================================================================== --- XMeeting/trunk/Source/Framework/XMeeting.h 2009-01-27 00:38:26 UTC (rev 45) +++ XMeeting/trunk/Source/Framework/XMeeting.h 2009-01-28 23:03:23 UTC (rev 46) @@ -33,6 +33,11 @@ **/ void XMCloseFramework(); +/** + * Returns whether the framework is initialized + **/ +BOOL XMIsInitialized(); + #import "XMTypes.h" #import "XMStringConstants.h" Modified: XMeeting/trunk/Source/Framework/XMeeting.m =================================================================== --- XMeeting/trunk/Source/Framework/XMeeting.m 2009-01-27 00:38:26 UTC (rev 45) +++ XMeeting/trunk/Source/Framework/XMeeting.m 2009-01-28 23:03:23 UTC (rev 46) @@ -150,4 +150,8 @@ [[NSNotificationCenter defaultCenter] postNotificationName:XMNotification_FrameworkDidClose object:nil]; } +} + +BOOL XMIsInitialized() { + return (_XMInitializedStatus == XM_FRAMEWORK_INITIALIZED); } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |