From 8fab12198bd5054cf11c2753ebc2252d51bf977d Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 17 Apr 2013 09:26:00 +0000 Subject: [PATCH] Fix problem that user material database is not watched by resource manager when file is first time created. --- src/Material/Material_ResourceMgr.cxx | 25 ++++++++++++++++++++++++- src/Material/Material_ResourceMgr.h | 1 + 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/Material/Material_ResourceMgr.cxx b/src/Material/Material_ResourceMgr.cxx index 59ca3b65f..9b38b3cb2 100644 --- a/src/Material/Material_ResourceMgr.cxx +++ b/src/Material/Material_ResourceMgr.cxx @@ -22,6 +22,7 @@ #include "Material_ResourceMgr.h" +#include #include #include @@ -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 diff --git a/src/Material/Material_ResourceMgr.h b/src/Material/Material_ResourceMgr.h index 91e4abda4..6cdfc75d6 100644 --- a/src/Material/Material_ResourceMgr.h +++ b/src/Material/Material_ResourceMgr.h @@ -57,6 +57,7 @@ signals: private: void watchUserFile( bool ); + void saved(); private slots: void update();