--- 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, ¶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;