Here comes the long promised patch as discussed with Jean-Marc and Jürgen. 
Jürgen, if that is OK with you I'll commit it.


Georg

Log:
Prevent automatic opening of child docs because of natbib labels
        * src/insets/insetinclude.h
        (updateBibfilesCache): adjust comment
        (getBibfilesCache): ditto

        * src/insets/insetinclude.C
        (getChildBuffer): new, return the buffer of the child if it exists
        (updateBibfilesCache): update the child buffer only if already loaded
        (getBibfilesCache): scan the child buffer only if already loaded

        * src/buffer.h
        (updateBibfilesCache): adjust comment
        (getBibfilesCache): ditto
        (bibfilesCache_): ditto
Index: src/insets/insetinclude.h
===================================================================
--- src/insets/insetinclude.h	(Revision 13865)
+++ src/insets/insetinclude.h	(Arbeitskopie)
@@ -56,11 +56,14 @@ public:
 		std::vector<std::pair<std::string,std::string> > & keys) const;
 	/** Update the cache with all bibfiles in use of the child buffer
 	 *  (including bibfiles of grandchild documents).
+	 *  Does nothing if the child document is not loaded to prevent
+	 *  automatic loading of all child documents upon loading the master.
 	 *  \param buffer the Buffer containing this inset.
 	 */
 	void updateBibfilesCache(Buffer const & buffer);
 	/** Return the cache with all bibfiles in use of the child buffer
 	 *  (including bibfiles of grandchild documents).
+	 *  Return an empty vector if the child doc is not loaded.
 	 *  \param buffer the Buffer containing this inset.
 	 */
 	std::vector<std::string> const &
Index: src/insets/insetinclude.C
===================================================================
--- src/insets/insetinclude.C	(Revision 13865)
+++ src/insets/insetinclude.C	(Arbeitskopie)
@@ -301,6 +301,20 @@ string const InsetInclude::getScreenLabe
 
 namespace {
 
+/// return the child buffer if the file is a LyX doc and is loaded
+Buffer * getChildBuffer(Buffer const & buffer, InsetCommandParams const & params)
+{
+	if (isVerbatim(params))
+		return 0;
+
+	string const included_file = includedFilename(buffer, params);
+	if (!isLyXFilename(included_file))
+		return 0;
+
+	return bufferlist.getBuffer(included_file);
+}
+
+
 /// return true if the file is or got loaded.
 bool loadIfNeeded(Buffer const & buffer, InsetCommandParams const & params)
 {
@@ -616,9 +630,8 @@ void InsetInclude::fillWithBibKeys(Buffe
 
 void InsetInclude::updateBibfilesCache(Buffer const & buffer)
 {
-	if (loadIfNeeded(buffer, params_)) {
-		string const included_file = includedFilename(buffer, params_);
-		Buffer * tmp = bufferlist.getBuffer(included_file);
+	Buffer * const tmp = getChildBuffer(buffer, params_);
+	if (tmp) {
 		tmp->setParentName("");
 		tmp->updateBibfilesCache();
 		tmp->setParentName(parentFilename(buffer));
@@ -629,9 +642,8 @@ void InsetInclude::updateBibfilesCache(B
 std::vector<string> const &
 InsetInclude::getBibfilesCache(Buffer const & buffer) const
 {
-	if (loadIfNeeded(buffer, params_)) {
-		string const included_file = includedFilename(buffer, params_);
-		Buffer * tmp = bufferlist.getBuffer(included_file);
+	Buffer * const tmp = getChildBuffer(buffer, params_);
+	if (tmp) {
 		tmp->setParentName("");
 		std::vector<string> const & cache = tmp->getBibfilesCache();
 		tmp->setParentName(parentFilename(buffer));
Index: src/buffer.h
===================================================================
--- src/buffer.h	(Revision 13865)
+++ src/buffer.h	(Arbeitskopie)
@@ -255,10 +255,10 @@ public:
 	/// return all bibkeys from buffer and its childs
 	void fillWithBibKeys(std::vector<std::pair<std::string, std::string> > & keys) const;
 	/// Update the cache with all bibfiles in use (including bibfiles
-	/// of child documents).
+	/// of loaded child documents).
 	void updateBibfilesCache();
 	/// Return the cache with all bibfiles in use (including bibfiles
-	/// of child documents).
+	/// of loaded child documents).
 	std::vector<std::string> const & getBibfilesCache() const;
 	///
 	void getLabelList(std::vector<std::string> &) const;
@@ -365,8 +365,8 @@ private:
 	/// it's BufferView, this should be FIXED in future.
 	StableDocIterator cursor_;
 	StableDocIterator anchor_;
-	/// A cache for the bibfiles (including bibfiles of child documents),
-	/// needed for appropriate update of natbib labels.
+	/// A cache for the bibfiles (including bibfiles of loaded child
+	/// documents), needed for appropriate update of natbib labels.
 	std::vector<std::string> bibfilesCache_;
 };
 

Reply via email to