mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 21:21:32 +00:00
DEPM: fix infinite loop.
This commit is contained in:
parent
fc0ab1283c
commit
5e4fd6c796
@ -781,11 +781,14 @@ bool Text::cursorDownParagraph(Cursor & cur)
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
|
/** delete num_spaces characters between from and to. Return the
|
||||||
|
* number of spaces that got physically deleted (not marked as
|
||||||
|
* deleted */
|
||||||
|
int deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
|
||||||
int num_spaces, bool const trackChanges)
|
int num_spaces, bool const trackChanges)
|
||||||
{
|
{
|
||||||
if (!num_spaces)
|
if (num_spaces <= 0)
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
// First, delete spaces marked as inserted
|
// First, delete spaces marked as inserted
|
||||||
int pos = from;
|
int pos = from;
|
||||||
@ -800,7 +803,9 @@ void deleteSpaces(Paragraph & par, pos_type const from, pos_type to,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Then remove remaining spaces
|
// Then remove remaining spaces
|
||||||
|
int const psize = par.size();
|
||||||
par.eraseChars(from, from + num_spaces, trackChanges);
|
par.eraseChars(from, from + num_spaces, trackChanges);
|
||||||
|
return psize - par.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -812,6 +817,7 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
//LYXERR(Debug::DEBUG, "DEPM: cur:\n" << cur << "old:\n" << old);
|
//LYXERR(Debug::DEBUG, "DEPM: cur:\n" << cur << "old:\n" << old);
|
||||||
|
|
||||||
Paragraph & oldpar = old.paragraph();
|
Paragraph & oldpar = old.paragraph();
|
||||||
|
bool const trackChanges = cur.buffer()->params().track_changes;
|
||||||
|
|
||||||
// We allow all kinds of "mumbo-jumbo" when freespacing.
|
// We allow all kinds of "mumbo-jumbo" when freespacing.
|
||||||
if (oldpar.isFreeSpacing())
|
if (oldpar.isFreeSpacing())
|
||||||
@ -873,14 +879,13 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
|
|
||||||
// Remove spaces and adapt cursor.
|
// Remove spaces and adapt cursor.
|
||||||
if (num_spaces > 0) {
|
if (num_spaces > 0) {
|
||||||
pos_type const oldlast = old.lastpos();
|
int const deleted =
|
||||||
deleteSpaces(oldpar, from, to, num_spaces,
|
deleteSpaces(oldpar, from, to, num_spaces, trackChanges);
|
||||||
cur.buffer()->params().track_changes);
|
|
||||||
// correct cur position
|
// correct cur position
|
||||||
// FIXME: there can be other cursors pointing there, we should update them
|
// FIXME: there can be other cursors pointing there, we should update them
|
||||||
if (same_par) {
|
if (same_par) {
|
||||||
if (cur[depth].pos() >= to)
|
if (cur[depth].pos() >= to)
|
||||||
cur[depth].pos() -= oldlast - old.lastpos();
|
cur[depth].pos() -= deleted;
|
||||||
else if (cur[depth].pos() > from)
|
else if (cur[depth].pos() > from)
|
||||||
cur[depth].pos() = min(from + 1, old.lastpos());
|
cur[depth].pos() = min(from + 1, old.lastpos());
|
||||||
need_anchor_change = true;
|
need_anchor_change = true;
|
||||||
@ -929,7 +934,7 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (oldpar.stripLeadingSpaces(cur.buffer()->params().track_changes)) {
|
if (oldpar.stripLeadingSpaces(trackChanges)) {
|
||||||
need_anchor_change = true;
|
need_anchor_change = true;
|
||||||
// We return true here because the Paragraph contents changed and
|
// We return true here because the Paragraph contents changed and
|
||||||
// we need a redraw before further action is processed.
|
// we need a redraw before further action is processed.
|
||||||
@ -973,7 +978,8 @@ void Text::deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool tra
|
|||||||
--num_spaces;
|
--num_spaces;
|
||||||
|
|
||||||
// Remove spaces if needed
|
// Remove spaces if needed
|
||||||
deleteSpaces(par, from , to, num_spaces, trackChanges);
|
int const deleted = deleteSpaces(par, from , to, num_spaces, trackChanges);
|
||||||
|
from = to - deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't delete anything if this is the only remaining paragraph
|
// don't delete anything if this is the only remaining paragraph
|
||||||
|
Loading…
Reference in New Issue
Block a user