- ErrorList::const_iterator it = controller().errorList().begin();
- ErrorList::const_iterator end = controller().errorList().end();
- for (; it != end; ++it)
- errorsLW->addItem(toqstr(it->error));
+
+bool GuiErrorList::goTo(int item)
+{
+ ErrorItem const & err = errorList()[item];
+
+ if (err.par_id == -1)
+ return false;
+
+ if (from_master_)
+ // FIXME: implement
+ return false;
+
+ Buffer const & buf = buffer();
+ DocIterator dit = buf.getParFromID(err.par_id);
+
+ if (dit == doc_iterator_end(&buf)) {
+ // FIXME: Happens when loading a read-only doc with
+ // unknown layout. Should this be the case?
+ LYXERR0("par id " << err.par_id << " not found");
+ return false;
+ }
+
+ // Now make the selection.
+ // if pos_end is 0, this means it is end-of-paragraph
+ pos_type const s = dit.paragraph().size();
+ pos_type const end = err.pos_end ? min(err.pos_end, s) : s;
+ pos_type const start = min(err.pos_start, end);
+ pos_type const range = end - start;
+ dit.pos() = start;
+ BufferView * bv = const_cast<BufferView *>(bufferview());
+ // FIXME: If we used an LFUN, we would not need this line:
+ bv->putSelectionAt(dit, range, false);
+ bv->processUpdateFlags(Update::Force | Update::FitCursor);
+ return true;