diff -r 22c3c67e5001 -r c45d4fe2ff0a cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp --- a/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp Tue Apr 27 17:03:25 2010 +0300 +++ b/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlg.cpp Tue May 11 16:35:05 2010 +0300 @@ -96,6 +96,9 @@ TInt CmPluginPacketDataSettingsDlg::ConstructAndRunLD( ) { + // Set this flag to allow edit continue + iCanEditingContinue = ETrue; + CleanupStack::PushL( this ); LoadResourceL( KPluginPacketDataResDirAndFileName ); CleanupStack::Pop( this ); @@ -290,6 +293,13 @@ { LOGGER_ENTERFN( "CmPluginPacketDataSettingsDlg::ProcessCommandL" ); + if ( !iCanEditingContinue ) + { + // We have to block all editing activity if database changed by + // other application + return; + } + if ( MenuShowing() ) { HideMenu(); @@ -323,6 +333,29 @@ // TBool CmPluginPacketDataSettingsDlg::OkToExitL( TInt aButtonId ) { + // Database has been changed by other application so exit from this view + // without update editings to database + if ( !iCanEditingContinue ) + { + if ( iExitReason == KDialogUserExit ) + { + iCmPluginBaseEng.CmMgr().WatcherUnRegister(); + + // Set iExitReason back to KDialogUserBack so as to exit from this view through else in the next call + TInt exitValue = KDialogUserExit; + iExitReason = KDialogUserBack; + // If destination has been deleted by other application + // then we may have to exit from Cmmgr + TryExitL( exitValue ); + return EFalse; + } + else + { + // Exit from this view here to avoid possible update to databse + return ETrue; + } + } + TBool retval( EFalse ); switch ( aButtonId ) @@ -362,6 +395,11 @@ // void CmPluginPacketDataSettingsDlg::CommsDatChangesL() { + if ( !iCanEditingContinue ) + { + return; + } + CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr(); CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination(); @@ -369,53 +407,24 @@ { if( !cmMgr.DestinationStillExistedL( parentDest ) ) { - cmMgr.WatcherUnRegister(); - // If parent destination diappears with some reason - // then the view must exit back to main view for it - // may be danger if going back to parent view iExitReason = KDialogUserExit; - TryExitL( iExitReason ); + iCanEditingContinue = EFalse; cmMgr.RemoveDestFromPool( parentDest ); delete parentDest; return; } - if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) ) - { - cmMgr.WatcherUnRegister(); - // In this case, the view can go back to the parent view - TryExitL( iExitReason ); - - cmMgr.RemoveDestFromPool( parentDest ); - delete parentDest; - return; - } - - // We may have to go back to parent view even though this Iap is still in CommsDat - // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more - // after this call when some Iap is deleted. - cmMgr.WatcherUnRegister(); - TryExitL( iExitReason ); - + // We may have to go back to parent view if database is changed by other application + iCanEditingContinue = EFalse; + cmMgr.RemoveDestFromPool( parentDest ); delete parentDest; } - else + else // Legacy { - if( !cmMgr.IapStillExistedL( iCmPluginBaseEng ) ) - { - cmMgr.WatcherUnRegister(); - // In this case, the dialog can go back to the parent view - TryExitL( iExitReason ); - return; - } - - // We may have to go back to parent view even though this Iap is still in CommsDat - // for cmMgr ( = iCmPluginBaseEng.CmMgr() ) can not be accessed any more - // after this call when some Iap is deleted. - cmMgr.WatcherUnRegister(); - TryExitL( iExitReason ); + // We may have to go back to parent view if database is changed by other application + iCanEditingContinue = EFalse; } } @@ -433,7 +442,13 @@ // -------------------------------------------------------------------------- // void CmPluginPacketDataSettingsDlg::HandleCommsDatChangeL() - { + { + if ( iCanEditingContinue ) + { + // Set iCanEditingContinue to False so that exit fromn this view without update editings + iCanEditingContinue = EFalse; + } + if( iNotifyFromSon == KCmNotifiedIapIsNotInThisDestination || iNotifyFromSon == KCmNotifiedIapDisappear ) {