mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-23 05:25:26 +00:00
Fix crash with info inset and dialogs
See the thread 2.4 Crash (was: Updated LaTeXConfig.lyx (bxjsclasses added)) on lyx-devel (26/01/2023). The backtrace imply a problem like: 1/ metrics are computed for some info inset 2/ the info inset is regenerated (and thus the paragraph it held is now invalid) 3/ We draw the inset and because of the new (disabled by default) bookmark display code, we access the id() of the invalid paragraph. 4/ boom! To fix the issue, introduce a new boolean member that indicates when the Row object of the metrics should not be used. In this case, the draw() method returns early.
This commit is contained in:
parent
04ece4f0d6
commit
17e60e2e85
@ -467,7 +467,7 @@ string InsetInfoParams::infoType() const
|
||||
|
||||
|
||||
InsetInfo::InsetInfo(Buffer * buf, string const & info)
|
||||
: InsetCollapsible(buf), initialized_(false)
|
||||
: InsetCollapsible(buf), initialized_(false), dirty_(true)
|
||||
{
|
||||
params_.type = InsetInfoParams::UNKNOWN_INFO;
|
||||
params_.force_ltr = false;
|
||||
@ -779,15 +779,19 @@ void InsetInfo::metrics(MetricsInfo & mi, Dimension & dim) const
|
||||
{
|
||||
const_cast<InsetInfo *>(this)->build();
|
||||
InsetCollapsible::metrics(mi, dim);
|
||||
dirty_ = false;
|
||||
}
|
||||
|
||||
|
||||
void InsetInfo::draw(PainterInfo & pi, int x, int y) const
|
||||
{
|
||||
if (dirty_)
|
||||
return;
|
||||
Changer chg = changeVar(lyxrc.mark_foreign_language, false);
|
||||
InsetCollapsible::draw(pi, x, y);
|
||||
}
|
||||
|
||||
|
||||
void InsetInfo::updateBuffer(ParIterator const & it, UpdateType utype, bool const deleted)
|
||||
|
||||
{
|
||||
@ -1235,6 +1239,8 @@ void InsetInfo::build()
|
||||
}
|
||||
}
|
||||
|
||||
// indicate that metrics are not usable anymore
|
||||
dirty_ = true;
|
||||
// Just to do something with that string
|
||||
LYXERR(Debug::INFO, "info inset text: " << gui);
|
||||
}
|
||||
|
@ -236,6 +236,8 @@ private:
|
||||
void build();
|
||||
///
|
||||
bool initialized_;
|
||||
/// true when metrics Row object should not be used
|
||||
mutable bool dirty_;
|
||||
///
|
||||
InsetInfoParams params_;
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user