From: Jean-Marc Lasgouttes Date: Mon, 27 Nov 2023 14:57:09 +0000 (+0100) Subject: Avoid full metrics computation when entering/leaving inset X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=73678dcde977802d5ff3ae07f0226484041fff48;p=features.git 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 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); + } }