X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferList.cpp;h=0aac272208aa1f14764be006f0d5b766751e6d63;hb=cca78e3c8ae27431323746abd64f9d7db017099d;hp=29e24c83cc9871fefc4b08e8be9101d0f2466d89;hpb=7f461f4392a19cf488dec005d2f12cfea83655d9;p=lyx.git diff --git a/src/BufferList.cpp b/src/BufferList.cpp index 29e24c83cc..0aac272208 100644 --- a/src/BufferList.cpp +++ b/src/BufferList.cpp @@ -24,12 +24,14 @@ #include "support/ExceptionMessage.h" #include "support/debug.h" +#include "support/FileName.h" +#include "support/FileNameList.h" #include "support/filetools.h" #include "support/gettext.h" #include "support/lstrings.h" #include "support/Package.h" -#include "support/assert.h" +#include "support/lassert.h" #include #include @@ -121,12 +123,13 @@ void BufferList::closeAll() } -vector const BufferList::getFileNames() const +FileNameList const & BufferList::fileNames() const { - vector nvec; + static FileNameList nvec; + nvec.clear(); transform(bstore.begin(), bstore.end(), back_inserter(nvec), - boost::bind(&Buffer::absFileName, _1)); + boost::bind(&Buffer::fileName, _1)); return nvec; } @@ -273,13 +276,9 @@ docstring BufferList::emergencyWrite(Buffer * buf) } -bool BufferList::exists(string const & s) const +bool BufferList::exists(FileName const & fname) const { - return find_if(bstore.begin(), bstore.end(), - bind(equal_to(), - bind(&Buffer::absFileName, _1), - s)) - != bstore.end(); + return getBuffer(fname) != 0; } @@ -292,14 +291,10 @@ bool BufferList::isLoaded(Buffer const * b) const } -Buffer * BufferList::getBuffer(string const & s) +Buffer * BufferList::getBuffer(support::FileName const & fname) const { - BufferStorage::iterator it = - find_if(bstore.begin(), bstore.end(), - bind(equal_to(), - bind(&Buffer::absFileName, _1), - s)); - + BufferStorage::const_iterator it = find_if(bstore.begin(), bstore.end(), + bind(equal_to(), bind(&Buffer::fileName, _1), fname)); return it != bstore.end() ? (*it) : 0; } @@ -324,15 +319,39 @@ void BufferList::setCurrentAuthor(docstring const & name, docstring const & emai } -int BufferList::bufferNum(string const & name) const +int BufferList::bufferNum(FileName const & fname) const { - vector buffers = getFileNames(); - vector::const_iterator cit = - find(buffers.begin(), buffers.end(), name); + FileNameList const & buffers = fileNames(); + FileNameList::const_iterator cit = + find(buffers.begin(), buffers.end(), fname); if (cit == buffers.end()) return 0; return int(cit - buffers.begin()); } +bool BufferList::releaseChild(Buffer * parent, Buffer * child) +{ + LASSERT(parent, return false); + LASSERT(child, return false); + LASSERT(parent->isChild(child), return false); + + // Child document has a different parent, don't close it. + if (child->parent() != parent) + return false; + + BufferStorage::iterator it = bstore.begin(); + BufferStorage::iterator end = bstore.end(); + for (; it != end; ++it) { + Buffer * buf = *it; + if (buf != parent && buf->isChild(child)) { + child->setParent(0); + return false; + } + } + release(child); + return true; +} + + } // namespace lyx