]> git.lyx.org Git - features.git/commitdiff
Avoid full metrics computation when entering/leaving inset
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Mon, 27 Nov 2023 14:57:09 +0000 (15:57 +0100)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Fri, 5 Apr 2024 11:06:26 +0000 (13:06 +0200)
Annotate function LFUN_FINISHED_xxx to indicate that they do not
require a full metrics computation.

Remove an "optimization" that meant that when the cursor changed
inset, a full metrics computation was requested.

Part of bug #12297

src/LyXAction.cpp
src/Text.cpp

index b6bb52152ce78238020addcb1335bf10689d1e2b..ece248e61c7b9a3de6a5f55078934a1db080167a 100644 (file)
@@ -1655,7 +1655,7 @@ void LyXAction::init()
  * \li Notion: See also #LFUN_FINISHED_FORWARD.
  * \endvar
  */
-               { LFUN_FINISHED_BACKWARD, "", ReadOnly, Hidden },
+               { LFUN_FINISHED_BACKWARD, "", ReadOnly | NoUpdate, Hidden },
 
 /*!
  * \var lyx::FuncCode lyx::LFUN_FINISHED_FORWARD
@@ -1668,7 +1668,7 @@ void LyXAction::init()
                back into the surrounding text.
  * \endvar
  */
-               { LFUN_FINISHED_FORWARD, "", ReadOnly, Hidden },
+               { LFUN_FINISHED_FORWARD, "", ReadOnly | NoUpdate, Hidden },
 
 /*!
  * \var lyx::FuncCode lyx::LFUN_FINISHED_LEFT
@@ -1676,7 +1676,7 @@ void LyXAction::init()
  * \li Notion: See also #LFUN_FINISHED_FORWARD.
  * \endvar
  */
-               { LFUN_FINISHED_LEFT, "", ReadOnly, Hidden },
+               { LFUN_FINISHED_LEFT, "", ReadOnly | NoUpdate, Hidden },
 
 
 /*!
@@ -1685,7 +1685,7 @@ void LyXAction::init()
  * \li Notion: See also #LFUN_FINISHED_FORWARD
  * \endvar
  */
-               { LFUN_FINISHED_RIGHT, "", ReadOnly, Hidden },
+               { LFUN_FINISHED_RIGHT, "", ReadOnly | NoUpdate, Hidden },
 
 /*!
  * \var lyx::FuncCode lyx::LFUN_FLEX_INSERT
index 2684309dec916075065181e347ad6c5c8bc55dd4..4749f36d2c25f2b3dadb2a9f0fa3642f3ab38acf 100644 (file)
@@ -6393,23 +6393,24 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                return;
        }
-       if (!needsUpdate
-           && &oldTopSlice.inset() == &cur.inset()
-           && oldTopSlice.idx() == cur.idx()
-           && !oldSelection // oldSelection is a backup of cur.selection() at the beginning of the function.
-           && !cur.selection())
-               // FIXME: it would be better if we could just do this
-               //
-               //if (cur.result().update() != Update::FitCursor)
-               //      cur.noScreenUpdate();
-               //
-               // But some LFUNs do not set Update::FitCursor when needed, so we
-               // do it for all. This is not very harmfull as FitCursor will provoke
-               // a full redraw only if needed but still, a proper review of all LFUN
-               // should be done and this needsUpdate boolean can then be removed.
-               cur.screenUpdateFlags(Update::FitCursor);
-       else
+       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())
+                       // FIXME: it would be better if we could just do this
+                       //
+                       //if (cur.result().update() != Update::FitCursor)
+                       //      cur.noScreenUpdate();
+                       //
+                       // But some LFUNs do not set Update::FitCursor when needed, so we
+                       // do it for all. This is not very harmfull as FitCursor will provoke
+                       // a full redraw only if needed but still, a proper review of all LFUN
+                       // should be done and this needsUpdate boolean can then be removed.
+                       cur.screenUpdateFlags(Update::FitCursor);
+               else
+                       cur.screenUpdateFlags(Update::ForceDraw | Update::FitCursor);
+       }
 }