diff --git a/src/frontends/qt4/GuiErrorList.cpp b/src/frontends/qt4/GuiErrorList.cpp index 04d5117e60..2e56b12412 100644 --- a/src/frontends/qt4/GuiErrorList.cpp +++ b/src/frontends/qt4/GuiErrorList.cpp @@ -15,7 +15,9 @@ #include "qt_helpers.h" #include "Buffer.h" +#include "BufferList.h" #include "BufferView.h" +#include "FuncRequest.h" #include "ParIterator.h" #include "Text.h" @@ -91,8 +93,9 @@ void GuiErrorList::paramsToDialog() errorsLW->clear(); descriptionTB->setPlainText(QString()); - ErrorList::const_iterator it = errorList().begin(); - ErrorList::const_iterator end = errorList().end(); + ErrorList const & el = errorList(); + ErrorList::const_iterator it = el.begin(); + ErrorList::const_iterator end = el.end(); for (; it != end; ++it) errorsLW->addItem(toqstr(it->error)); errorsLW->setCurrentRow(0); @@ -101,17 +104,19 @@ void GuiErrorList::paramsToDialog() ErrorList const & GuiErrorList::errorList() const { - return bufferview()->buffer().errorList(error_type_); + if (bufferview() && &bufferview()->buffer() == buf_) + error_list_ = bufferview()->buffer().errorList(error_type_); + return error_list_; } bool GuiErrorList::initialiseParams(string const & error_type) { error_type_ = error_type; - Buffer const & buf = bufferview()->buffer(); + buf_ = &bufferview()->buffer(); name_ = bformat(_("%1$s Errors (%2$s)"), _(guiErrorType(error_type)), - from_utf8(buf.absFileName())); + from_utf8(buf_->absFileName())); paramsToDialog(); return true; } @@ -119,15 +124,20 @@ bool GuiErrorList::initialiseParams(string const & error_type) bool GuiErrorList::goTo(int item) { + if (!bufferview() || &buffer() != buf_) { + if (!theBufferList().isLoaded(buf_)) + return false; + FuncRequest fr(LFUN_BUFFER_SWITCH, buf_->absFileName()); + dispatch(fr); + } ErrorItem const & err = errorList()[item]; if (err.par_id == -1) return false; - Buffer const & buf = buffer(); - DocIterator dit = buf.getParFromID(err.par_id); + DocIterator dit = buf_->getParFromID(err.par_id); - if (dit == doc_iterator_end(buf.inset())) { + if (dit == doc_iterator_end(buf_->inset())) { // FIXME: Happens when loading a read-only doc with // unknown layout. Should this be the case? LYXERR0("par id " << err.par_id << " not found"); diff --git a/src/frontends/qt4/GuiErrorList.h b/src/frontends/qt4/GuiErrorList.h index 8b7d3f6a42..b2e0b83da1 100644 --- a/src/frontends/qt4/GuiErrorList.h +++ b/src/frontends/qt4/GuiErrorList.h @@ -57,6 +57,10 @@ private: std::string error_type_; /// the parent document name docstring name_; + /// + Buffer const * buf_; + /// + mutable ErrorList error_list_; }; } // namespace frontend