Salome HOME
Make edition transaction where actually nothing was changed as empty one and do not...
[modules/shaper.git] / src / Model / Model_Session.cpp
index ff74e5bf3ad2b095e274c7cbdbfb9ff7c9739a91..172b7d3ff220ffd0e685853b53ffc524b62cb89f 100644 (file)
@@ -219,6 +219,15 @@ std::shared_ptr<ModelAPI_Document> Model_Session::activeDocument()
 static void makeCurrentLast(std::shared_ptr<ModelAPI_Document> theDoc) {
   if (theDoc.get()) {
     FeaturePtr aLast = std::dynamic_pointer_cast<Model_Document>(theDoc)->lastFeature();
+    // if last is nested into something else, make this something else as last:
+    // otherwise it will look like edition of sub-element, so, the main will be disabled
+    if (aLast.get()) {
+      CompositeFeaturePtr aMain = ModelAPI_Tools::compositeOwner(aLast);
+      while(aMain.get()) {
+        aLast = aMain;
+        aMain = ModelAPI_Tools::compositeOwner(aLast);
+      }
+    }
     theDoc->setCurrentFeature(aLast, false);
   }
 }
@@ -240,7 +249,8 @@ void Model_Session::setActiveDocument(
       if (aDoc.get()) {
         bool aWasChecked = myCheckTransactions;
         setCheckTransactions(false);
-        aDoc->objects()->synchronizeFeatures(false, true, true);
+        TDF_LabelList anEmptyUpdated;
+        aDoc->objects()->synchronizeFeatures(anEmptyUpdated, true, true);
         if (aWasChecked)
             setCheckTransactions(true);
       }
@@ -314,7 +324,8 @@ std::shared_ptr<ModelAPI_Document> Model_Session::copy(
   aRT->SetRelocation(aSourceRoot, aTargetRoot);
   TDF_CopyTool::Copy(aDS, aRT);
 
-  aNew->objects()->synchronizeFeatures(false, true, true);
+  TDF_LabelList anEmptyUpdated;
+  aNew->objects()->synchronizeFeatures(anEmptyUpdated, true, true);
   return aNew;
 }
 
@@ -344,7 +355,7 @@ void Model_Session::processEvent(const std::shared_ptr<Events_Message>& theMessa
     const std::shared_ptr<Config_FeatureMessage> aMsg = 
       std::dynamic_pointer_cast<Config_FeatureMessage>(theMessage);
     if (aMsg) {
-      // proccess the plugin info, load plugin
+      // process the plugin info, load plugin
       if (myPlugins.find(aMsg->id()) == myPlugins.end()) {
         myPlugins[aMsg->id()] = std::pair<std::string, std::string>(
           aMsg->pluginLibrary(), aMsg->documentKind());