phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFilteredContactView.cpp
branchRCL_3
changeset 17 2666d9724c76
parent 6 e8e3147d53eb
child 18 d4f567ce2e7c
--- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFilteredContactView.cpp	Mon Jun 21 15:24:27 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFilteredContactView.cpp	Thu Jul 15 18:22:55 2010 +0300
@@ -378,9 +378,26 @@
         const CFieldFactory& fieldFactory = Store().FieldFactory();
 
         // Copy construct the filter
-        iFilter = CVPbkFieldTypeSelector::NewL(
+        CVPbkFieldTypeSelector* filter = CVPbkFieldTypeSelector::NewL(
                 *aViewDefinition.FieldTypeFilter() );
-
+        if ( iFilter )
+            {
+            delete iFilter;
+            iFilter = NULL;
+            }
+        
+        iFilter = filter;
+        filter = NULL;
+        
+        // whenever a new iFilter created, set it as new fieldTypeSelector
+        // iCustomFilteredView, to avoid such case that new iFilter created
+        // but iCustomFilteredView is still the old one using the old iFilter,
+        // it will panic since the old iFilter is deleted.
+        if ( iCustomFilteredView )
+            {
+            iCustomFilteredView->SetFieldTypeSelector( iFilter );
+            }
+        
         iNativeFilter = ConvertFieldTypeFilterL
             ( *iFilter, fieldFactory, iFs, iCustomFilteringNeeded );
         }
@@ -397,9 +414,18 @@
         // Construction of the iCustomFilteredView should be done in two
         // phases. Due to that there is dependencies between views in this
         // and iCustomFilteredView class.
-        iCustomFilteredView =
-            new (ELeave) CCustomFilteredContactView( Store(), iFilter,
+
+        CCustomFilteredContactView* customFilteredView = new (ELeave) CCustomFilteredContactView( Store(), iFilter,
                 *this, aViewDefinition.ContactSelector() );
+        
+        if ( iCustomFilteredView )
+            {
+            delete iCustomFilteredView;
+            iCustomFilteredView = NULL;
+            }
+        iCustomFilteredView = customFilteredView;
+        customFilteredView = NULL;
+        
         ConstructBaseViewsL( aViewDefinition, *iCustomFilteredView,
                 aViewSortOrder );
 
@@ -642,6 +668,7 @@
         }
     else
         {
+     
         iBaseView = CContactLocalView::NewL( *iNativeObserver,
                 Store().NativeDatabase(), aViewSortOrder,
                 KVPbkDefaultContactViewPrefs );