Salome HOME
Fix problem that user material database is not watched by resource manager when file...
authorvsr <vsr@opencascade.com>
Wed, 17 Apr 2013 09:26:00 +0000 (09:26 +0000)
committervsr <vsr@opencascade.com>
Wed, 17 Apr 2013 09:26:00 +0000 (09:26 +0000)
src/Material/Material_ResourceMgr.cxx
src/Material/Material_ResourceMgr.h

index 59ca3b65fa3532e0d3d5155a5c81ca3d9d9c51dc..9b38b3cb2e9ac63485f2f65a8113e67b66efde0a 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "Material_ResourceMgr.h"
 
+#include <QFileInfo>
 #include <QFileSystemWatcher>
 #include <QThread>
 
@@ -175,7 +176,10 @@ void Material_ResourceMgr::watchUserFile( bool on )
   if ( on ) {
     if ( !myWatcher ) {
       myWatcher = new QFileSystemWatcher( this );
-      myWatcher->addPath( userFileName( appName() ) );
+      QFileInfo ufile = userFileName( appName() );
+      if ( ufile.exists() ) {
+       myWatcher->addPath( ufile.filePath() );
+      }
       connect( myWatcher, SIGNAL( fileChanged( QString ) ), this, SLOT( update() ) );
     }
   }
@@ -187,6 +191,25 @@ void Material_ResourceMgr::watchUserFile( bool on )
   }
 }
 
+/*!
+  \brief This function is called after user configuration file is saved.
+  \internal
+*/
+void Material_ResourceMgr::saved()
+{
+  if ( resourceMgr() != this ) {
+    resourceMgr()->saved();
+  }
+  else if ( myWatcher ) {
+    QStringList files = myWatcher->files();
+    QFileInfo ufile = userFileName( appName() );
+    if ( ufile.exists() && !files.contains( ufile.filePath() ) ) {
+      myWatcher->addPath( ufile.filePath() );
+      update();
+    }
+  }
+}
+
 /*!
   \brief Update user database slot
   \internal
index 91e4abda4d6c18a5ccd5841688722230ad90d4d0..6cdfc75d6e354a5e938c89dd85b2e7443a123dcb 100644 (file)
@@ -57,6 +57,7 @@ signals:
 
 private:
   void watchUserFile( bool );
+  void saved();
 
 private slots:
   void update();