--- a/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Fri Mar 19 09:43:21 2010 +0200
+++ b/uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp Fri Apr 16 15:56:24 2010 +0300
@@ -346,6 +346,9 @@
CHuiEnv::~CHuiEnv()
{
+ iSynchObservers.Close();
+ iSynchIds.Close();
+
iActionObservers.Close();
// Destroy groups in reverse order so that references will be removed
@@ -741,9 +744,12 @@
TReal32 elapsedTime = 0;
// Investigate whether the environment is released
- if(self->iState == EReleased)
+ if(self->iState == EReleased /*|| self->iPauseDrawing*/ )
{
- HUI_DEBUG(_L("CHuiEnv::RefreshCallBack() - Warning: Refresh callback called while environment is released."));
+ if (!self->iPauseDrawing)
+ {
+ HUI_DEBUG(_L("CHuiEnv::RefreshCallBack() - Warning: Refresh callback called while environment is released."));
+ }
return KErrNone;
}
@@ -1769,9 +1775,17 @@
EXPORT_C void CHuiEnv::Synchronize(TInt aId, MHuiSynchronizationObserver* aObserver)
{
- iSynchObserver = aObserver;
- iSynchId = aId;
-
+ TInt err = iSynchObservers.Append(aObserver);
+ if(err)
+ {
+ return;
+ }
+ err = iSynchIds.Append(aId);
+ if(err )
+ {
+ iSynchObservers.Remove(iSynchObservers.Count()-1);
+ return;
+ }
if ( aObserver )
{
ContinueRefresh();
@@ -1780,7 +1794,7 @@
void CHuiEnv::DoSynchronize()
{
- if ( !iSynchObserver )
+ if ( iSynchObservers.Count() == 0)
{
return;
}
@@ -1796,8 +1810,13 @@
}
}
- iSynchObserver->Synchronized( iSynchId );
- iSynchObserver = NULL;
+ TUint observersCount = iSynchObservers.Count()-1;
+ for(TInt u = observersCount; u >= 0 ; u-- )
+ {
+ iSynchObservers[u]->Synchronized( iSynchIds[u] );
+ iSynchObservers.Remove(u);
+ iSynchIds.Remove(u);
+ }
}
void CHuiEnv::RemoveTheControlGroup(TInt aId)