commit 73678dcde977802d5ff3ae07f0226484041fff48
Author: Jean-Marc Lasgouttes <[email protected]>
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
---
src/LyXAction.cpp | 8 ++++----
src/Text.cpp | 33 +++++++++++++++++----------------
2 files changed, 21 insertions(+), 20 deletions(-)
diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp
index b6bb52152c..ece248e61c 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 2684309dec..4749f36d2c 100644
--- a/src/Text.cpp
+++ b/src/Text.cpp
@@ -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);
+ }
}
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs