cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp
branchRCL_3
changeset 24 c45d4fe2ff0a
parent 0 5a93021fdf25
--- a/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp	Tue Apr 27 17:03:25 2010 +0300
+++ b/cmmanager/cmmgr/Plugins/cmpluginwlan/src/cmpwlansettingsdlg.cpp	Tue May 11 16:35:05 2010 +0300
@@ -118,7 +118,12 @@
 //
 TInt CmPluginWlanSettingsDlg::ConstructAndRunLD( )
     {
+    // Set this flag to allow edit continue
+    iCanEditingContinue = ETrue;
+    
+    CleanupStack::PushL( this );
     LoadResourceL( KPluginWlanResDirAndFileName );
+    CleanupStack::Pop( this );
     
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     cmMgr.WatcherRegisterL( this );
@@ -769,6 +774,29 @@
 //
 TBool CmPluginWlanSettingsDlg::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 );
@@ -817,11 +845,18 @@
 //
 void CmPluginWlanSettingsDlg::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:
@@ -873,6 +908,11 @@
 //
 void CmPluginWlanSettingsDlg::CommsDatChangesL()
     {
+    if ( !iCanEditingContinue )
+        {
+        return;
+        }
+    
     CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
     CCmDestinationImpl* parentDest = iCmPluginBaseEng.ParentDestination();
 
@@ -880,51 +920,25 @@
         {
         if( !cmMgr.DestinationStillExistedL( parentDest ) )
             {
-            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 ) )
-            {
-            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 go back to parent view if database is changed by other application
+        iCanEditingContinue = EFalse;
 
-        // 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 );
-                
         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;
         }
     }
 
@@ -943,7 +957,11 @@
 //
 void CmPluginWlanSettingsDlg::HandleCommsDatChangeL()
     {
-    //CCmManagerImpl& cmMgr = iCmPluginBaseEng.CmMgr();
+    if ( iCanEditingContinue )
+        {
+        // Set iCanEditingContinue to False so that exit fromn this view without update editings
+        iCanEditingContinue = EFalse;
+        }
     
     if( iNotifyFromAdv == KCmNotifiedIapIsNotInThisDestination || 
             iNotifyFromAdv == KCmNotifiedIapDisappear )