From: Georg Baum Date: Fri, 19 May 2006 07:21:43 +0000 (+0000) Subject: Prevent automatic opening of child docs because of natbib labels X-Git-Tag: 1.6.10~13214 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ff4b3ba8fc690d72584168d174a8e4d2d02442bc;p=lyx.git 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 git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13869 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/buffer.h b/src/buffer.h index e537ee079a..a3cbc3f61f 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -255,10 +255,10 @@ public: /// return all bibkeys from buffer and its childs void fillWithBibKeys(std::vector > & 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 const & getBibfilesCache() const; /// void getLabelList(std::vector &) 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 bibfilesCache_; }; diff --git a/src/insets/insetinclude.C b/src/insets/insetinclude.C index 070c39f8f1..4620c52c27 100644 --- a/src/insets/insetinclude.C +++ b/src/insets/insetinclude.C @@ -301,6 +301,20 @@ string const InsetInclude::getScreenLabel(Buffer const &) const 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(Buffer const & buffer, 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(Buffer const & buffer) std::vector 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 const & cache = tmp->getBibfilesCache(); tmp->setParentName(parentFilename(buffer)); diff --git a/src/insets/insetinclude.h b/src/insets/insetinclude.h index 3fb919af15..0f2e3255d3 100644 --- a/src/insets/insetinclude.h +++ b/src/insets/insetinclude.h @@ -56,11 +56,14 @@ public: std::vector > & 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 const &