diff -r 22c3c67e5001 -r c45d4fe2ff0a cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp --- a/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp Tue Apr 27 17:03:25 2010 +0300 +++ b/cmmanager/cmmgr/Plugins/cmpluginpacketdata/src/cmppacketdatasettingsdlgadv.cpp Tue May 11 16:35:05 2010 +0300 @@ -96,6 +96,9 @@ // TInt CmPluginPacketDataSettingsDlgAdv::ConstructAndRunLD() { + // Set this flag to allow edit continue + iCanEditingContinue = ETrue; + CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr(); cmMgr.WatcherRegisterL( this ); @@ -313,11 +316,18 @@ // void CmPluginPacketDataSettingsDlgAdv::ProcessCommandL( TInt aCommandId ) { + if ( !iCanEditingContinue ) + { + // We have to block all editing activity if database changed by + // other application + return; + } + if ( MenuShowing() ) { HideMenu(); } - + switch ( aCommandId ) { case EPluginBaseCmdExit: @@ -360,6 +370,29 @@ // TBool CmPluginPacketDataSettingsDlgAdv::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 ) { @@ -368,7 +401,11 @@ { CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr(); cmMgr.WatcherUnRegister(); + + iExitReason = KDialogUserBack; + retval = ETrue; } + break; default: { retval = CmPluginBaseSettingsDlgAdv::OkToExitL( aButtonId ); @@ -414,6 +451,11 @@ // void CmPluginPacketDataSettingsDlgAdv::CommsDatChangesL() { + if ( !iCanEditingContinue ) + { + return; + } + CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr(); CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination(); @@ -426,68 +468,31 @@ iParent->NotifyParentView( KCmNotifiedDestinationDisappear ); } - cmMgr.WatcherUnRegister(); - // If parent destination is deleted by somebody then the dialog must exit back to main view + iCanEditingContinue = EFalse; iExitReason = KDialogUserExit; - TryExitL( iExitReason ); - - cmMgr.RemoveDestFromPool( parentDest ); - delete parentDest; - return; - } - - if( !cmMgr.IsIapStillInDestL( parentDest, iCmPluginBaseEng ) ) - { - if( iParent ) - { - iParent->NotifyParentView( KCmNotifiedIapIsNotInThisDestination ); - } - - cmMgr.WatcherUnRegister(); - // In this case, the dialog can go back to the parent view - TryExitL( iExitReason ); cmMgr.RemoveDestFromPool( parentDest ); delete parentDest; return; } - - // We may have to notify parent view to go back to its 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. + + // We may have to go back to parent view if database is changed by other application if( iParent ) { iParent->NotifyParentView( KCmNotifiedIapDisappear ); } - cmMgr.WatcherUnRegister(); - TryExitL( iExitReason ); - + iCanEditingContinue = EFalse; + cmMgr.RemoveDestFromPool( parentDest ); delete parentDest; } - else + else // Legacy { - if( !cmMgr.IapStillExistedL(iCmPluginBaseEng) ) - { - if( iParent ) - { - iParent->NotifyParentView( KCmNotifiedIapDisappear ); - } - - cmMgr.WatcherUnRegister(); - // In this case, the dialog can go back to the parent view - TryExitL( iExitReason ); - return; - } - - // We may have to notify parent view to go back to its 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. + // We may have to go back to parent view if database is changed by other application if( iParent ) { iParent->NotifyParentView( KCmNotifiedIapDisappear ); } - cmMgr.WatcherUnRegister(); - TryExitL( iExitReason ); + iCanEditingContinue = EFalse; } }