The branch, biginset, has been updated.

- Log -----------------------------------------------------------------

commit 75bd5dcf8abd2d00070ef35675a50b844e5a55a8
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Nov 27 15:57:09 2023 +0100

    Avoid full metrics computation when entering/leaving inset
    
    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

diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp
index 19f1203..fe120c8 100644
--- a/src/LyXAction.cpp
+++ b/src/LyXAction.cpp
@@ -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
diff --git a/src/Text.cpp b/src/Text.cpp
index ef5dd26..548e925 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -6341,23 +6341,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);
+       }
 }
 
 

commit 674bf0515a19da5bad8ad1e0c6ca500d01d62ee3
Author: Jean-Marc Lasgouttes <lasgout...@lyx.org>
Date:   Mon Nov 27 15:13:56 2023 +0100

    Avoid some full metrics computations related to math previews
    
    When entering/leaving a math hull inset, a Update::Force flag was set,
    in case the metrics of the inset would change because of a switch
    between normal and preview representation.
    
    When entering the inset, this code is now used only when the inset was
    in preview mode.
    
    In both cases, Update::Force is replaced with Update::SinglePar.
    
    Part of bug #12297.

diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index d2c2159..3724250 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -903,7 +903,7 @@ bool InsetMathHull::notifyCursorLeaves(Cursor const & old, 
Cursor & cur)
 {
        if (RenderPreview::previewMath()) {
                reloadPreview(old);
-               cur.screenUpdateFlags(Update::Force);
+               cur.screenUpdateFlags(Update::SinglePar);
        }
        return false;
 }
@@ -2296,14 +2296,17 @@ void InsetMathHull::handleFont2(Cursor & cur, docstring 
const & arg)
 
 void InsetMathHull::edit(Cursor & cur, bool front, EntryDirection entry_from)
 {
+       bool const has_preview = previewState(&cur.bv());
        cur.push(*this);
        bool enter_front = (entry_from == Inset::ENTRY_DIRECTION_LEFT ||
                (entry_from == Inset::ENTRY_DIRECTION_IGNORE && front));
        enter_front ? idxFirst(cur) : idxLast(cur);
-       // The inset formula dimension is not necessarily the same as the
-       // one of the instant preview image, so we have to indicate to the
-       // BufferView that a metrics update is needed.
-       cur.screenUpdateFlags(Update::Force);
+       if (has_preview) {
+               // The inset formula dimension is in general different from the
+               // one of the instant preview image, so we have to indicate to 
the
+               // BufferView that a metrics update is needed.
+               cur.screenUpdateFlags(Update::SinglePar);
+       }
 }
 
 

-----------------------------------------------------------------------

Summary of changes:
 src/LyXAction.cpp            |    8 ++++----
 src/Text.cpp                 |   33 +++++++++++++++++----------------
 src/mathed/InsetMathHull.cpp |   13 ++++++++-----
 3 files changed, 29 insertions(+), 25 deletions(-)


hooks/post-receive
-- 
Repository for new features
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to