diff -r 696bfeff199e -r fa1df4b99609 messagingappbase/mce/src/MceMessageListView.cpp --- a/messagingappbase/mce/src/MceMessageListView.cpp Thu Jul 15 18:34:37 2010 +0300 +++ b/messagingappbase/mce/src/MceMessageListView.cpp Thu Aug 19 09:51:11 2010 +0300 @@ -92,8 +92,11 @@ const TUid KMailTechnologyTypeUid = { 0x10001671 }; // These are for opening the viewer in inbox. -// We need to wait possible opened editor to be closed before opening received message. -const TInt KMceLaunchViewerStartTime = 1; // try to open viewer immediately +// try to open viewer immediately if there is no other viewer is open +const TInt KMceLaunchViewerStartTime = 1; +//0.3 sec delay is taken to ensure previously launched viewer is closed as to avoid the crashes and KErrCancel/KErrInUse errors due to launching of new viewer when currently running +//viewer is still in the process of exiting +const TInt KMceLaunchViewerStartTimeWhenEditorOpen = 300000; const TInt KMceLaunchViewerRetryTime = 500000; // wait 0.5 secs for the next trial const TInt KMceLaunchViewerRetryCounter = 20; // so editors have approx 10 secs to save... @@ -2453,6 +2456,12 @@ // ---------------------------------------------------- TBool CMceMessageListView::FindUnreadMessageAndOpenItL( const TMsvId aId ) { + TInt launchViewerStartTime = KMceLaunchViewerStartTime; + if(iMceUi->IsEditorOpen()) + { + launchViewerStartTime = KMceLaunchViewerStartTimeWhenEditorOpen; + } + // TODO: how to simplify this ? TMsvId firstUnreadMessageId = KErrNotFound; TBool oneUnreadMessage = EFalse; @@ -2504,7 +2513,7 @@ iLocalScreenClearer = NULL; iLocalScreenClearer = CAknLocalScreenClearer::NewL( EFalse ); MCELOGGER_WRITE("FindUnreadMessageAndOpenItL: start viewer launcher"); - const TTimeIntervalMicroSeconds32 startTimeInterval = KMceLaunchViewerStartTime; + TTimeIntervalMicroSeconds32 startTimeInterval = launchViewerStartTime; const TTimeIntervalMicroSeconds32 retryTimeInterval = KMceLaunchViewerRetryTime; iLaunchViewerCounter = 0; iMessageViewerLauncher->Start(