Salome HOME
Fix bug 12109: SIGSEGV after trying to create sub-mesh in the second study.
authorjfa <jfa@opencascade.com>
Thu, 6 Apr 2006 08:12:40 +0000 (08:12 +0000)
committerjfa <jfa@opencascade.com>
Thu, 6 Apr 2006 08:12:40 +0000 (08:12 +0000)
src/SMESHGUI/SMESHGUI_SelectionOp.cxx
src/SMESHGUI/SMESHGUI_SelectionOp.h

index c03de45c1dfb03c362c3587681e23948778c55bd..2616fa69f7a6f8b6636dddb83be18140808cd5d9 100644 (file)
@@ -67,11 +67,7 @@ SMESHGUI_SelectionOp::SMESHGUI_SelectionOp( const Selection_Mode mode )
 //=================================================================================
 SMESHGUI_SelectionOp::~SMESHGUI_SelectionOp()
 {
-  Filters::const_iterator anIt = myFilters.begin(),
-                          aLast = myFilters.end();
-  for( ; anIt!=aLast; anIt++ )
-    if( anIt.data() )
-      delete anIt.data();
+  removeCustomFilters();
 }
 
 //=================================================================================
@@ -99,17 +95,21 @@ void SMESHGUI_SelectionOp::startOperation()
 // name     : removeCustomFilters
 // purpose  :
 //=================================================================================
-void SMESHGUI_SelectionOp::removeCustomFilters() const
+void SMESHGUI_SelectionOp::removeCustomFilters()
 {
-  LightApp_SelectionMgr* mgr = selectionMgr();
-  if( !mgr )
-    return;
-    
-  Filters::const_iterator anIt = myFilters.begin(),
-                          aLast = myFilters.end();
-  for( ; anIt!=aLast; anIt++ )
-    if( anIt.data() )
-      mgr->removeFilter( anIt.data() );
+  if (myFilters.count() > 0) {
+    LightApp_SelectionMgr* mgr = selectionMgr();
+    Filters::const_iterator anIt = myFilters.begin(),
+                            aLast = myFilters.end();
+    for (; anIt != aLast; anIt++) {
+      if (anIt.data()) {
+        if (mgr) mgr->removeFilter(anIt.data());
+        delete anIt.data();
+      }
+    }
+
+    myFilters.clear();
+  }
 }
 
 //=================================================================================
@@ -195,9 +195,7 @@ void SMESHGUI_SelectionOp::onActivateObject( int id )
 //=================================================================================
 void SMESHGUI_SelectionOp::onDeactivateObject( int id )
 {
-  LightApp_SelectionMgr* mgr = selectionMgr();
-  if( mgr && myFilters.contains( id ) && myFilters[ id ] )
-    mgr->removeFilter( myFilters[ id ] );
+  removeCustomFilters();
 }
 
 //=================================================================================
index bb1a05b6619340ea877b4e2271fc85ea9578035b..e2075a1bb03ffda9527222676703bacbf7a126c7 100644 (file)
@@ -90,7 +90,7 @@ protected:
   virtual SUIT_SelectionFilter* createFilter( const int ) const;
 
   //! Remove only filters set by this operation (they are in map myFilters )
-  void removeCustomFilters() const;
+  void removeCustomFilters();
 
   //! Return what selection mode is set in VTK viewer
   Selection_Mode    selectionMode() const;