uiacceltk/hitchcock/coretoolkit/src/HuiEnv.cpp
changeset 14 83d2d132aa58
parent 13 8f67d927ea57
child 31 1b6909418757
--- 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)