Text::dispatch: ignore single par update when there is a full update

Reorder the tests so that, when the flag Update::SinglePar has been
specified, it does not take precedence over Update::Force flag.

This fixes the crash with inset-split.
This commit is contained in:
Jean-Marc Lasgouttes 2024-06-07 16:49:25 +02:00
parent c96d3a0340
commit a185642746

View File

@ -6378,27 +6378,17 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
} }
} }
// FIXME: The cursor flag is reset two lines below
// so we need to check here if some of the LFUN did touch that.
// for now only Text::erase() and Text::backspace() do that.
// The plan is to verify all the LFUNs and then to remove this
// singleParUpdate boolean altogether.
if (cur.result().screenUpdate() & Update::Force) {
singleParUpdate = false;
needsUpdate = true;
}
// FIXME: the following code should go in favor of fine grained // FIXME: the following code should go in favor of fine grained
// update flag treatment. // update flag treatment.
if (singleParUpdate || cur.result().screenUpdate() & Update::SinglePar) { if (needsUpdate || cur.result().screenUpdate() & Update::Force)
cur.screenUpdateFlags(Update::Force | Update::FitCursor);
else if (singleParUpdate || cur.result().screenUpdate() & Update::SinglePar) {
// Inserting characters does not change par height in general. So, try // Inserting characters does not change par height in general. So, try
// to update _only_ this paragraph. BufferView will detect if a full // to update _only_ this paragraph. BufferView will detect if a full
// metrics update is needed anyway. // metrics update is needed anyway.
cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor); cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
return; return;
} }
if (needsUpdate)
cur.screenUpdateFlags(Update::Force | Update::FitCursor);
else { else {
// oldSelection is a backup of cur.selection() at the beginning of the function. // oldSelection is a backup of cur.selection() at the beginning of the function.
if (!oldSelection && !cur.selection()) if (!oldSelection && !cur.selection())