]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #1900 Fatal error when close study
authornds <nds@opencascade.com>
Thu, 1 Dec 2016 11:21:16 +0000 (14:21 +0300)
committernds <nds@opencascade.com>
Thu, 1 Dec 2016 11:21:16 +0000 (14:21 +0300)
src/XGUI/XGUI_DataModel.cpp
src/XGUI/XGUI_DataModel.h
src/XGUI/XGUI_Workshop.cpp

index 6e0acaba861953ee90774dc14432552a6d4eccec..1a4efa787c42d32130af361e1dabe685a18b3bcb 100644 (file)
@@ -62,7 +62,8 @@ ModelAPI_Document* getSubDocument(void* theObj)
 
 
 // Constructor *************************************************
-XGUI_DataModel::XGUI_DataModel(QObject* theParent) : QAbstractItemModel(theParent)
+XGUI_DataModel::XGUI_DataModel(QObject* theParent) : QAbstractItemModel(theParent),
+  myIsEventsProcessingStopped(false)
 {
   Events_Loop* aLoop = Events_Loop::loop();
   aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_CREATED));
@@ -79,6 +80,8 @@ XGUI_DataModel::~XGUI_DataModel()
 //******************************************************
 void XGUI_DataModel::processEvent(const std::shared_ptr<Events_Message>& theMessage)
 {
+  if (myIsEventsProcessingStopped)
+    return;
   DocumentPtr aRootDoc = ModelAPI_Session::get()->moduleDocument();
   std::string aRootType = myXMLReader->rootType();
   std::string aSubType = myXMLReader->subType();
index a57f85c20e3b666936b07f97388cb17daeff7105..f3dc27c13b499e4b3c410bc030fba39632892bec 100644 (file)
@@ -125,6 +125,9 @@ public:
   /// Initialises XML data model reader. It must be initialised before DataModel using.
   void setXMLReader(Config_DataModelReader* theReader) { myXMLReader = theReader; }
 
+  /// Do not processing anymore events of model loop
+  void stopEventsProcessing() { myIsEventsProcessingStopped = true; }
+
 signals:
   /// Signal about tree had been rebuilt
   void treeRebuilt();
@@ -161,6 +164,8 @@ private:
   QStringList listOfShowNotEmptyFolders(bool fromRoot = true) const;
 
   Config_DataModelReader* myXMLReader;
+
+  bool myIsEventsProcessingStopped;
 };
 
 #endif
\ No newline at end of file
index 6996a2d02e4d2ad9864e0b120190fc88dbe695bd..8b7aa83a50d0a93cf55595718cca102ef3ab34cd 100755 (executable)
@@ -24,6 +24,7 @@
 #include <XGUI_CustomPrs.h>
 #include <XGUI_HistoryMenu.h>
 #include <XGUI_QtEvents.h>
+#include <XGUI_DataModel.h>
 
 #ifndef HAVE_SALOME
 #include <AppElements_Button.h>
@@ -2029,6 +2030,10 @@ void XGUI_Workshop::closeDocument()
 
   module()->closeDocument();
 
+  // data model need not process the document's signals about objects modifications as
+  // the document is closed
+  objectBrowser()->dataModel()->stopEventsProcessing();
+
   SessionPtr aMgr = ModelAPI_Session::get();
   aMgr->closeAll();
 }