camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp
branchRCL_3
changeset 18 51dda465e618
parent 16 d486e5e3cc9a
child 20 38fb6f7eacd5
--- a/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp	Wed Mar 31 21:06:44 2010 +0300
+++ b/camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp	Wed Apr 14 15:41:04 2010 +0300
@@ -6428,12 +6428,34 @@
         iInfo.iVfMode == ECamViewfinderDirect )
         {
         PRINT( _L("Camera <> viewfinder active and window handle changed, restarting viewfinder...") );
-        iCamera->StopViewFinder();
-        iInfo.iVfState = ECamTriInactive;
-
-        // restart viewfinder
-        //TRAP_IGNORE( ProcessVfStartRequestL() );
-		iAppController.EnterViewfinderMode(iAppController.CurrentMode());
+         iCamera->StopViewFinder();
+        
+        if ( iViewfinderWindow != NULL )
+            {
+            iViewfinderWindow = aWindow;
+            // Use the same viewfinder position and size as for bitmap viewfinder
+            TPckgBuf<TCamParamsVfBitmap> params;
+            iSettingProvider.ProvideCameraParamL( ECameraParamVfBitmap, &params );
+            
+            CEikonEnv* env = CEikonEnv::Static();
+    
+              TInt orgPos = SetVfWindowOrdinal(); // Set visible
+              iCamera->StartViewFinderDirectL(
+                  env->WsSession(),
+                  *env->ScreenDevice(),
+                  *iViewfinderWindow,
+                  params().iRect );
+              (void) SetVfWindowOrdinal( orgPos ); // back to original
+            }
+        else
+            {
+            iCamera->StopViewFinder();
+            iInfo.iVfState = ECamTriInactive;
+
+            // restart viewfinder
+       
+		    iAppController.EnterViewfinderMode(iAppController.CurrentMode());
+            }
         }
     iViewfinderWindow = aWindow;