mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-30 05:12:40 +00:00
finished fixing removeAutoInsets()
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@3350 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
822c8ce430
commit
09b61de303
@ -147,7 +147,38 @@ bool BufferView::removeAutoInsets()
|
||||
Paragraph * par_prev = par ? par->previous() : 0;
|
||||
bool removed = false;
|
||||
|
||||
bool dead = text->setCursor(this, par, 0);
|
||||
if (text->setCursor(this, par, 0)
|
||||
&& cur_par == par_prev) {
|
||||
// The previous setCursor line was deleted and that
|
||||
// was the cur_par line. This can only happen if an
|
||||
// error box was the sole item on cur_par.
|
||||
if (cur_par_prev) {
|
||||
// '|' = par, '.' = cur_par, 'E' = error box
|
||||
// First step below may occur before while{}
|
||||
// a |a a a .a
|
||||
// E -> .E -> |.E -> . -> |b
|
||||
// . b b |b
|
||||
// b
|
||||
cur_par = cur_par_prev;
|
||||
cur_pos = cur_par_prev->size();
|
||||
cur_par_prev = cur_par->previous();
|
||||
// cur_par_next remains the same
|
||||
} else if (cur_par_next) {
|
||||
// First step below may occur before while{}
|
||||
// .
|
||||
// E -> |.E -> |. -> . -> .|a
|
||||
// a a a |a
|
||||
cur_par = cur_par_next;
|
||||
cur_pos = 0;
|
||||
// cur_par_prev remains unset
|
||||
cur_par_next = cur_par->next();
|
||||
} else {
|
||||
// I can't find a way to trigger this
|
||||
// so it should be unreachable code
|
||||
// unless the buffer is corrupted.
|
||||
lyxerr << "BufferView::removeAutoInsets() is bad\n";
|
||||
}
|
||||
}
|
||||
|
||||
Paragraph::inset_iterator pit = par->inset_iterator_begin();
|
||||
Paragraph::inset_iterator pend = par->inset_iterator_end();
|
||||
@ -169,40 +200,6 @@ bool BufferView::removeAutoInsets()
|
||||
found = true;
|
||||
text->redoParagraph(this);
|
||||
}
|
||||
if (dead) {
|
||||
// Error box paragraphs appear to have a bad next_ pointer
|
||||
// especially when that's all that's in the paragraph..
|
||||
// Then if you are in an empty paragraph after an error box
|
||||
// which is in its own paragraph this will fail because
|
||||
// cur_prev_par was the one just deleted (I think).
|
||||
// That's the main reason why this clause makes almost no difference.
|
||||
// Feel free to delete this whole clause as my brain is asleep now.
|
||||
while ((cur_par_prev || cur_par_next)
|
||||
&& text->setCursor(this,
|
||||
cur_par_prev ? cur_par_prev : cur_par_next,
|
||||
0)) {
|
||||
// we just removed cur_par so have to fix the "cursor"
|
||||
if (cur_par_prev == par) {
|
||||
// attempting to solve the "prev par was deleted
|
||||
// because it had only an error inset in it" problem
|
||||
if (par_prev) {
|
||||
cur_par = par_prev;
|
||||
cur_pos = cur_par->size();
|
||||
} else {
|
||||
cur_par = cur_par_next;
|
||||
cur_pos = 0;
|
||||
}
|
||||
} else if (cur_par_prev) {
|
||||
cur_par = cur_par_prev;
|
||||
cur_pos = cur_par->size();
|
||||
} else {
|
||||
cur_par = cur_par_next;
|
||||
cur_pos = 0;
|
||||
}
|
||||
cur_par_prev = cur_par->previous();
|
||||
cur_par_next = cur_par->next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
text->setCursorIntern(this, cur_par, cur_pos);
|
||||
|
@ -1,3 +1,12 @@
|
||||
2002-01-13 Allan Rae <rae@lyx.org>
|
||||
|
||||
* BufferView2.C (removeAutoInsets): finished off earlier fix.
|
||||
Now seems indestructible. Remaining task is to audit all other
|
||||
code affected by deleteEmptyParagraphMechanism. One small quirk
|
||||
left is that an empty document with an error in the preamble can
|
||||
be made to report an error but no error box appears. I don't know
|
||||
where it goes.
|
||||
|
||||
2002-01-13 John Levon <moz@compsoc.man.ac.uk>
|
||||
|
||||
* Thesaurus.h:
|
||||
|
Loading…
Reference in New Issue
Block a user