]> git.lyx.org Git - features.git/commitdiff
Text::dispatch: ignore single par update when there is a full update
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 7 Jun 2024 14:49:25 +0000 (16:49 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sat, 8 Jun 2024 20:29:45 +0000 (22:29 +0200)
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.

(cherry picked from commit a1856427468cd4e442c77f394715c825d919f902)

src/Text.cpp

index 4749f36d2c25f2b3dadb2a9f0fa3642f3ab38acf..642eb284c56730fdd9e8c5ade9f7b85f578fc352 100644 (file)
@@ -6374,27 +6374,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
        // 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
                // to update _only_ this paragraph. BufferView will detect if a full
                // metrics update is needed anyway.
                cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                return;
        }
-       if (needsUpdate)
-               cur.screenUpdateFlags(Update::Force | Update::FitCursor);
        else {
                // oldSelection is a backup of cur.selection() at the beginning of the function.
            if (!oldSelection && !cur.selection())