diff -r d486e5e3cc9a -r 51dda465e618 camerauis/cameraapp/generic/src/cameracontroller/camcameracontroller.cpp --- 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 params; + iSettingProvider.ProvideCameraParamL( ECameraParamVfBitmap, ¶ms ); + + 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;