diff options
| -rw-r--r-- | src/MainWindow.h | 3 | ||||
| -rw-r--r-- | src/mainwin.cc | 25 | 
2 files changed, 24 insertions, 4 deletions
| diff --git a/src/MainWindow.h b/src/MainWindow.h index ed12f34..a4835c2 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -77,11 +77,12 @@ private:  	AbstractNode *find_root_tag(AbstractNode *n);  	void updateTemporalVariables();  	bool fileChangedOnDisk(); +	bool includesChanged();  	bool compileTopLevelDocument(bool reload);  	bool compile(bool reload, bool procevents);  	void compileCSG(bool procevents);  	bool maybeSave(); -	bool checkModified(); +	bool checkEditorModified();  	QString dumpCSGTree(AbstractNode *root);  	static void consoleOutput(const std::string &msg, void *userdata);  	void loadViewSettings(); diff --git a/src/mainwin.cc b/src/mainwin.cc index be7c567..4b9a0e7 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -928,7 +928,7 @@ void MainWindow::actionSaveAs()  void MainWindow::actionReload()  { -	if (checkModified()) refreshDocument(); +	if (checkEditorModified()) refreshDocument();  }  void MainWindow::hideEditor() @@ -1003,6 +1003,23 @@ bool MainWindow::fileChangedOnDisk()  	return false;  } +// FIXME: The following two methods are duplicated in ModuleCache.cc - refactor +static bool is_modified(const std::string &filename, const time_t &mtime) +{ +	struct stat st; +	memset(&st, 0, sizeof(struct stat)); +	stat(filename.c_str(), &st); +	return (st.st_mtime > mtime); +} + +bool MainWindow::includesChanged() +{ +	BOOST_FOREACH(const Module::IncludeContainer::value_type &item, this->root_module->includes) { +		if (is_modified(item.first, item.second)) return true; +	} +	return false; +} +  /*!  	If reload is true, does a timestamp check on the document and tries to reload it.  	Otherwise, just reparses the current document and any dependencies, updates the  @@ -1014,7 +1031,9 @@ bool MainWindow::compileTopLevelDocument(bool reload)  {  	bool shouldcompiletoplevel = !reload; -	if (reload && fileChangedOnDisk() && checkModified()) { +	if (reload &&  +			(fileChangedOnDisk() && checkEditorModified()) || +			includesChanged()) {  		shouldcompiletoplevel = true;  		refreshDocument();  	} @@ -1083,7 +1102,7 @@ void MainWindow::autoReloadSet(bool on)  	}  } -bool MainWindow::checkModified() +bool MainWindow::checkEditorModified()  {  	if (editor->isContentModified()) {  		QMessageBox::StandardButton ret; | 
