mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-13 06:20:28 +00:00
Fix crash when copying a macro with instant preview on
The MacroData pointer is updated by MathData::metrics() which is not called when selecting a math inset with instant preview for math on. Thus, we have to update it in the copy constructor otherwise a crash is almost assured when hitting Ctrl+C.
This commit is contained in:
parent
e4fada8c57
commit
f3b03699ef
@ -69,6 +69,8 @@ public:
|
|||||||
char const * MathMLtype() const;
|
char const * MathMLtype() const;
|
||||||
///
|
///
|
||||||
void setSymbol(latexkeys const * sym) { sym_ = sym; }
|
void setSymbol(latexkeys const * sym) { sym_ = sym; }
|
||||||
|
///
|
||||||
|
DocIterator const & pos() { return pos_; }
|
||||||
|
|
||||||
/// lock while being drawn to avoid recursions
|
/// lock while being drawn to avoid recursions
|
||||||
int lock() const { return ++lockCount_; }
|
int lock() const { return ++lockCount_; }
|
||||||
|
@ -203,6 +203,14 @@ MathMacro::MathMacro(MathMacro const & that)
|
|||||||
: InsetMathNest(that), d(new Private(*that.d))
|
: InsetMathNest(that), d(new Private(*that.d))
|
||||||
{
|
{
|
||||||
d->updateChildren(this);
|
d->updateChildren(this);
|
||||||
|
if (d->macro_ && lyxrc.preview == LyXRC::PREVIEW_ON) {
|
||||||
|
// We need to update d->macro_ by ourselves because in this case
|
||||||
|
// MathData::metrics() is not called when selecting a math inset
|
||||||
|
DocIterator const & pos = d->macroBackup_.pos();
|
||||||
|
d->macro_ = pos.buffer()->getMacro(name(), pos);
|
||||||
|
if (!d->macro_)
|
||||||
|
d->macro_ = &d->macroBackup_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,6 +221,14 @@ MathMacro & MathMacro::operator=(MathMacro const & that)
|
|||||||
InsetMathNest::operator=(that);
|
InsetMathNest::operator=(that);
|
||||||
*d = *that.d;
|
*d = *that.d;
|
||||||
d->updateChildren(this);
|
d->updateChildren(this);
|
||||||
|
if (d->macro_ && lyxrc.preview == LyXRC::PREVIEW_ON) {
|
||||||
|
// We need to update d->macro_ by ourselves because in this case
|
||||||
|
// MathData::metrics() is not called when selecting a math inset
|
||||||
|
DocIterator const & pos = d->macroBackup_.pos();
|
||||||
|
d->macro_ = pos.buffer()->getMacro(name(), pos);
|
||||||
|
if (!d->macro_)
|
||||||
|
d->macro_ = &d->macroBackup_;
|
||||||
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user