--- 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;
}
}