uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp
branchRCL_3
changeset 22 7c5dd702d6d3
parent 17 3ac8bf5c5014
child 24 f93c875b566e
--- a/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp	Tue Apr 27 17:34:42 2010 +0300
+++ b/uiacceltk/hitchcock/AlfDecoderServerClient/src/alfcompositionclient.cpp	Tue May 11 17:03:00 2010 +0300
@@ -1243,6 +1243,7 @@
     {
     public:
         virtual void Remove(CAlfSignalObserver* aObserver) = 0;
+        virtual RAlfBridgerClient& Client() = 0;
     };
 
 NONSHARABLE_CLASS(CAlfEffectObserver::CAlfEffectObserverData): public CBase, public MAlfEffectObserverData
@@ -1251,6 +1252,7 @@
     void SubscribeCallbackL(MAlfEffectObserver* aObserver, TInt aHandle, TInt aType = MAlfEffectObserver::EAlfEffectComplete );        
     ~CAlfEffectObserverData();
     void Remove(CAlfSignalObserver* aObserver);
+    RAlfBridgerClient& Client();
     
     // data
     RAlfBridgerClient iClient;
@@ -1267,20 +1269,40 @@
         CActiveScheduler::Add(this);
         SetActive(); 
         }
-                
-    void DoCancel(){} // do not...
+		
+    ~CAlfSignalObserver()
+        {
+        Cancel();
+        }
+
+    private:
     
+        void DoCancel()
+            {
+            if (iOwner)
+                {
+                iOwner->Client().SendSynch(EAlfCompleteSignal, TIpcArgs(iHandle, iType));
+                }
+            }
+    
+	    // just to prohibit cancel outside destructor
+        void Cancel()
+            {
+            CActive::Cancel();
+			}	   
+	
     void RunL()
         {    
         iObserver->HandleEffectCallback(iType, iHandle, iStatus.Int());
         iOwner->Remove(this);
         }    
     
-    MAlfEffectObserverData* iOwner;
-    CAlfEffectObserver::MAlfEffectObserver* iObserver;
-    TInt iHandle;        
-    TInt iType;
-    TIpcArgs iArgs;
+	public:
+        MAlfEffectObserverData* iOwner;
+        CAlfEffectObserver::MAlfEffectObserver* iObserver;
+        TInt iHandle;        
+        TInt iType;
+        TIpcArgs iArgs;
     };
 
 void CAlfEffectObserver::CAlfEffectObserverData::SubscribeCallbackL(MAlfEffectObserver* aObserver, TInt aHandle, TInt aType)
@@ -1294,15 +1316,24 @@
         
 CAlfEffectObserver::CAlfEffectObserverData::~CAlfEffectObserverData()
     {    
+    iObservers.ResetAndDestroy();
+    iObservers.Close();
     iClient.Close(); // destroys signals
-    iObservers.ResetAndDestroy();
     }
-        
+
+RAlfBridgerClient& CAlfEffectObserver::CAlfEffectObserverData::Client()
+    {
+    return iClient;
+    }
+
 void CAlfEffectObserver::CAlfEffectObserverData::Remove(CAlfSignalObserver* aObserver)
     {
     TInt index = iObservers.Find(aObserver);
-    iObservers.Remove(index);
-    delete aObserver;   
+    if (index != KErrNotFound)
+        {
+        iObservers.Remove(index);
+        }
+    delete aObserver;
     }    
     
 EXPORT_C CAlfEffectObserver* CAlfEffectObserver::NewL()
@@ -1317,7 +1348,7 @@
 
 EXPORT_C CAlfEffectObserver::~CAlfEffectObserver()
     {
-    delete iData;        
+    delete iData; 
     }
 
 EXPORT_C TInt CAlfEffectObserver::ActiveEffectsCount()
@@ -1330,11 +1361,14 @@
     iData->SubscribeCallbackL(aObserver, aHandle, aType ); 
     }
 
+EXPORT_C void CAlfEffectObserver::SetDistractionWindow(const RWindowTreeNode& aWindow, TInt aState)
+    {
+    iData->iClient.SendSynch(EAlfSetDistractionWindow, TIpcArgs(aWindow.WindowGroupId(), aWindow.ClientHandle(), aState));
+    }
+
 CAlfEffectObserver::CAlfEffectObserver()
     {
     }
-
  
+//end of file
 
-
-//end of file