diff --git a/src/BufferView2.C b/src/BufferView2.C index 8ad5d776a2..6072b45483 100644 --- a/src/BufferView2.C +++ b/src/BufferView2.C @@ -117,22 +117,24 @@ bool BufferView::removeAutoInsets() bool found = false; // Trap the deletion of the paragraph the cursor is in. - // It should be almost impossible for the new cursor par to be - // deleted later on in this function. - // This is the way to segfault this now. Although you may have to do this - // multiple times: Have an InsetERT with an unknown command in it. - // View->DVI, move cursor between Error box and InsetERT and hit , - // , again, View->DVI, BANG! - // + // Iterate until we find a paragraph that won't be immediately deleted. + // In reality this should mean we only execute the body of the while + // loop once at most. However for safety we iterate rather than just + // make this an if() conditional. 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" + // We just removed cur_par so have to fix the "cursor" if (cur_par_prev) { + // '.' = cur_par + // a -> a. + // . cur_par = cur_par_prev; cur_pos = cur_par->size(); } else { + // . -> .a + // a cur_par = cur_par_next; cur_pos = 0; } @@ -155,7 +157,7 @@ bool BufferView::removeAutoInsets() if (cur_par_prev) { // '|' = par, '.' = cur_par, 'E' = error box // First step below may occur before while{} - // a |a a a .a + // a |a a a a. // E -> .E -> |.E -> . -> |b // . b b |b // b diff --git a/src/ChangeLog b/src/ChangeLog index ca8aca8453..0e26bc0036 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -6,6 +6,7 @@ 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. + (removeAutoInsets): Improved comments. 2002-01-13 John Levon