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?
+ // 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;
}
+ // Don't try to highlight the content of info insets
+ while (dit.inset().lyxCode() == INFO_CODE)
+ dit.forwardPos();
+
+ // If this paragraph is empty, highlight the previous one
+ while (dit.paragraph().empty())
+ dit.backwardPos();
+
// 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;
+ pos_type const range = end == start ? s - start : end - start;
+ // end-of-paragraph cannot be highlighted, so highlight the last thing
+ dit.pos() = range ? start : end - 1;
BufferView * bv = const_cast<BufferView *>(bufferview());
- // FIXME: If we used an LFUN, we would not need this line:
- bv->putSelectionAt(dit, range, false);
+ // FIXME LFUN
+ // If we used an LFUN, we would not need these lines:
+ bv->putSelectionAt(dit, max(range, pos_type(1)), false);
+ bv->processUpdateFlags(Update::Force | Update::FitCursor);
return true;
}