uifw/AvKon/src/AknViewAppUi.cpp
branchRCL_3
changeset 56 d48ab3b357f1
parent 55 aecbbf00d063
child 64 85902f042028
--- a/uifw/AvKon/src/AknViewAppUi.cpp	Tue Aug 31 15:28:30 2010 +0300
+++ b/uifw/AvKon/src/AknViewAppUi.cpp	Wed Sep 01 12:16:19 2010 +0100
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "Eclipse Public License v1.0"
@@ -27,6 +27,10 @@
 #include <aknclearer.h>
 #include <AknUtils.h>
 #include <akntoolbar.h>
+#include <akntranseffect.h>
+#include <centralrepository.h>
+
+
 #include "aknview.h"
 #include "aknshut.h"
 #include "aknenv.h"
@@ -43,6 +47,8 @@
 // CONSTANTS
 const TInt KAknAppUiViewsGranularity = 1;
 const TInt KAknViewAsyncPriority = EActivePriorityRedrawEvents + 10;
+
+
 #ifdef RD_SPLIT_VIEW
 const TInt KAknSplitViewSize = 2;
 
@@ -228,12 +234,20 @@
 	iExtension->iNavigator = new ( ELeave ) CAknViewNavigator( this );
 	AddToStackL( iExtension->iNavigator, ECoeStackPriorityDefault - 1, ECoeStackFlagRefusesFocus );
 #endif // RD_SPLIT_VIEW
-	
-	if ( iEikonEnv->RootWin().OrdinalPosition() == 0 && // only clear the window for foreground apps
+
+	// Only clear the window for foreground apps.
+	if ( iEikonEnv->RootWin().OrdinalPosition() == 0 &&
 	     iExtension->iUseDefaultScreenClearer )
-		{
-		iClearer = CAknLocalScreenClearer::NewL( ETrue );
-		}
+        {
+	    if ( !iEikonEnv->StartedAsServerApp() )
+            {
+            iClearer = CAknLocalScreenClearer::NewL( ETrue );
+            }
+        else
+            {
+            iClearer = CAknLocalScreenClearer::NewL( ETrue, ETrue );
+            }
+        }
 	}
 
 // -----------------------------------------------------------------------------
@@ -247,18 +261,18 @@
 	if (iExtension && iExtension->iNavigator )
 	    RemoveFromStack( iExtension->iNavigator );
 #endif // RD_SPLIT_VIEW
-	
+
     // Hide application toolbar to prevent it from showing 
     // after views are deleted
     if ( CAknAppUi::CurrentFixedToolbar() )
         {
-        CAknAppUi::CurrentFixedToolbar()->SetToolbarVisibility( EFalse );   
+        CAknAppUi::CurrentFixedToolbar()->SetToolbarVisibility( EFalse );
         }
 
-	delete iClearer;
-	delete iShutter;
-	delete iActivationTick;
-	
+    delete iClearer;
+    delete iShutter;
+    delete iActivationTick;
+
 	if ( iActivationQueue )
 		{
 		iActivationQueue->ResetAndDestroy();
@@ -312,15 +326,23 @@
 	
 	for ( TInt i = 0; i < count; ++i )
 		{
-		CAknView* view( iViews->At( i ) );
-		
-		if ( view->Id() == aViewId )
-			{
-			iViews->Delete( i );
-			CCoeAppUi::DeregisterView( *view );
-			delete view;
-			return;
-			}
+        CAknView* view( iViews->At( i ) );
+        if ( view->Id() == aViewId )
+            {
+            // remove the deleted view from iExtensione's list. Or the pointer 
+            // is invalid 
+            TInt index = iExtension->iActiveViews.Find(view);
+            if ( index >= 0 && index < iExtension->iActiveViews.Count() )
+                {
+                iExtension->iActiveViews.Remove(index);
+                view->AknViewDeactivated();
+                } 
+                
+                iViews->Delete( i );
+                CCoeAppUi::DeregisterView( *view );
+                delete view;
+                return;
+            }
 		}
 	}
 
@@ -611,12 +633,15 @@
             // (default granularity is 8) -> no memory allocation failures.
             if ( splitView )
                 {
-                iExtension->iActiveViews.Append( View( splitView->iViewIds[0] ) );
-                iExtension->iActiveViews.Append( View( splitView->iViewIds[1] ) );
+                error = iExtension->iActiveViews.Append( View( splitView->iViewIds[0] ) );
+                if (KErrNone == error)
+                    {
+                    error = iExtension->iActiveViews.Append( View( splitView->iViewIds[1] ) );
+                    }
                 }
             else
                 {
-                iExtension->iActiveViews.Append( item->iNewView );
+                error = iExtension->iActiveViews.Append( item->iNewView );
                 }
 
             iView = item->iNewView;