When selecting text, in some cases a DocIterator could be forwarded
to a (non-existant) paragraph after the end. The critical part of
this fix is to break the loop at the correct place. The following
are additional improvements:
- increase readability by defining a bool named "in_last_par"
- use cur.selectionEnd().pit() instead of cur.selectionEnd().paragraph().id()
- use it.lastpos() instead of it.paragraph().size()
This commit fixes a regression introduced by
23de5e5e, and reported
at #11204.
Thanks to Jürgen and JMarc.
(cherry picked from commit
d12798759aeb7bae77bec63098fd81f8cc9e554b)
if (!cur.buffer()->areChangesPresent())
break;
- for (DocIterator it = cur.selectionBegin(); it < cur.selectionEnd(); it.forwardPar()) {
+ for (DocIterator it = cur.selectionBegin(); ; it.forwardPar()) {
pos_type const beg = it.pos();
pos_type end;
- if (it.paragraph().id() == cur.selectionEnd().paragraph().id())
+ bool const in_last_par = (it.pit() == cur.selectionEnd().pit());
+ if (in_last_par)
end = cur.selectionEnd().pos();
else
- end = it.paragraph().size();
+ end = it.lastpos();
if (beg != end && it.paragraph().isChanged(beg, end)) {
enable = true;
break;
}
+ if (in_last_par)
+ break;
}
}
break;