--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgadv.cpp Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlgadv.cpp Tue May 11 16:35:05 2010 +0300
@@ -69,6 +69,9 @@
//
TInt CmPluginWlanSettingsDlgAdv::ConstructAndRunLD( )
{
+ // Set this flag to allow edit continue
+ iCanEditingContinue = ETrue;
+
CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
cmMgr.WatcherRegisterL( this );
@@ -398,11 +401,18 @@
//
void CmPluginWlanSettingsDlgAdv:: 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:
@@ -474,6 +484,29 @@
//
TBool CmPluginWlanSettingsDlgAdv::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;
+ }
+ }
+
// Translate the button presses into commands for the appui & current
// view to handle
TBool retval( EFalse );
@@ -521,6 +554,11 @@
//
void CmPluginWlanSettingsDlgAdv::CommsDatChangesL()
{
+ if ( !iCanEditingContinue )
+ {
+ return;
+ }
+
CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
@@ -533,69 +571,33 @@
iParent->NotifyParentView( KCmNotifiedDestinationDisappear );
}
- cmMgr.WatcherUnRegister();
// If parent destination is deleted by somebody then the dialog must exit back to main view
iExitReason = KDialogUserExit;
- TryExitL( iExitReason );
-
+ iCanEditingContinue = EFalse;
+
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 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 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;
}
}
@@ -618,7 +620,13 @@
// --------------------------------------------------------------------------
//
void CmPluginWlanSettingsDlgAdv::HandleCommsDatChangeL()
- {
+ {
+ if ( iCanEditingContinue )
+ {
+ // Set iCanEditingContinue to False so that exit fromn this view without update editings
+ iCanEditingContinue = EFalse;
+ }
+
if( iNotifyFromIp == KCmNotifiedIapIsNotInThisDestination ||
iNotifyFromIp == KCmNotifiedIapDisappear )
{