Salome HOME
Fix problem that user material database is not watched by resource manager when file...
[modules/geom.git] / src / Material / Material_ResourceMgr.cxx
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