Salome HOME
bos #19219 [CEA] SIGSEGV when right-click in the view in 3D layers dialog box V9_5_BR fixes_for_950 V9_5_0 V9_5_0rc1 V9_5_0rc2 V9_5_0rc3
authorvsr <vsr@opencascade.com>
Mon, 15 Jun 2020 15:44:50 +0000 (18:44 +0300)
committervsr <vsr@opencascade.com>
Mon, 15 Jun 2020 15:44:50 +0000 (18:44 +0300)
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_Selection.h

index 6f59abd8c0c9d8d1558907c0739218cc1ed216a9..5abe5c5be61812c0d1b17777e7a921e28c191f5a 100644 (file)
@@ -43,8 +43,6 @@
 #include <SalomeApp_Application.h>
 #include <LightApp_VTKSelector.h>
 #include <SVTK_ViewWindow.h>
-#include <LightApp_SelectionMgr.h>
-#include <LightApp_DataOwner.h>
 
 // IDL includes
 #include <SALOMEconfig.h>
@@ -79,8 +77,6 @@ void SMESHGUI_Selection::init( const QString& client, LightApp_SelectionMgr* mgr
 
   if( mgr )
   {
-    myOwners.clear();
-    mgr->selected(myOwners, client);
     for( int i=0, n=count(); i<n; i++ ) {
       myTypes.append( typeName( type( entry( i ) ) ) );
       myControls.append( controlMode( i ) );
@@ -617,20 +613,22 @@ bool SMESHGUI_Selection::hasGeomReference( int ind ) const
 
 bool SMESHGUI_Selection::canBreakLink( int ind ) const
 {
-  if ( ind >= 0 && ind < myTypes.count()) {
-    if (isReference(ind)) {
-      SUIT_DataOwner* aOwn = myOwners.at(ind);
-      LightApp_DataOwner* sowner = dynamic_cast<LightApp_DataOwner*>(aOwn);
-      QString aEntry = sowner->entry();
-      _PTR(SObject) aSObject = SMESH::getStudy()->FindObjectID(aEntry.toStdString());
-      _PTR(SObject) aFatherObj = aSObject->GetFather();
-      _PTR(SComponent) aComponent = aFatherObj->GetFatherComponent();
-      if (aComponent->ComponentDataType() == "SMESH") {
-        QString aObjEntry = entry(ind);
-        _PTR(SObject) aGeomSObject = SMESH::getStudy()->FindObjectID(aObjEntry.toStdString());
-        GEOM::GEOM_Object_var aObject = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aGeomSObject);
-        if (!aObject->_is_nil())
-          return aObject->IsParametrical();
+  if ( ind >= 0 && isReference(ind) ) {
+    QString aEntry = objectInfo(ind, OI_RefEntry).toString();
+    if (!aEntry.isEmpty()) {
+      _PTR(SObject) aSObject = SMESH::getStudy()->FindObjectID( aEntry.toStdString());
+      if (aSObject) {
+       _PTR(SObject) aFatherObj = aSObject->GetFather();
+       if (aFatherObj) {
+         _PTR(SComponent) aComponent = aFatherObj->GetFatherComponent();
+         if (aComponent && aComponent->ComponentDataType() == "SMESH") {
+           QString aObjEntry = entry(ind);
+           _PTR(SObject) aGeomSObject = SMESH::getStudy()->FindObjectID(aObjEntry.toStdString());
+           GEOM::GEOM_Object_var aObject = SMESH::SObjectToInterface<GEOM::GEOM_Object>(aGeomSObject);
+           if (!aObject->_is_nil())
+             return aObject->IsParametrical();
+          }
+        }
       }
     }
   }
index 5d23e768fa7e56a9984877b8238dcf7d19562a99..e4b0641e0099c6a973aa34a9bf7e9487b82d647f 100644 (file)
@@ -32,7 +32,6 @@
 
 // SALOME GUI includes
 #include <LightApp_Selection.h>
-#include <SUIT_DataOwner.h>
 
 // SALOME KERNEL includes
 #include <SALOMEDSClient_definitions.hxx>
@@ -97,7 +96,6 @@ private:
   QStringList             myTypes;
   QStringList             myControls;
   QList<SMESH_Actor*>     myActors;
-  SUIT_DataOwnerPtrList   myOwners;
 };
 
 #endif // SMESHGUI_SELECTION_H