commit e36a8903d7bf6433056dffcc290c369a37cf6e3a
Author: Enrico Forestieri <for...@lyx.org>
Date:   Thu Sep 15 02:39:30 2016 +0200

    Really fix the problem with not updated macros
    
    Revert to the strategy used at 8f86ee74 but not using mathedWordList
    because it may be still uninitialized at load time. Instead, use the
    globalMacros method for getting the same info.
    There was a thinko at 8ec91e80, because globalMacros always returns
    null for user defined macros.
---
 src/BufferView.cpp       |    8 ++++++--
 src/mathed/MathMacro.cpp |   16 ++++++++--------
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index fa95d40..fad0154 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -495,7 +495,9 @@ void BufferView::processUpdateFlags(Update::flags flags)
 
        // updateMetrics() does not update paragraph position
        // This is done at draw() time. So we need a redraw!
-       buffer_.changed(false);
+       // We pass true so that metrics are computed for the sake
+       // of having MacroData updated.
+       buffer_.changed(true);
 
        if (needsFitCursor()) {
                // The cursor is off screen so ensure it is visible.
@@ -2165,7 +2167,9 @@ void BufferView::updateHoveredInset() const
 
                // This event (moving without mouse click) is not passed 
further.
                // This should be changed if it is further utilized.
-               buffer_.changed(false);
+               // We pass true so that metrics are computed for the sake
+               // of having MacroData updated.
+               buffer_.changed(true);
        }
 }
 
diff --git a/src/mathed/MathMacro.cpp b/src/mathed/MathMacro.cpp
index 5a73742..e1484e8 100644
--- a/src/mathed/MathMacro.cpp
+++ b/src/mathed/MathMacro.cpp
@@ -614,9 +614,9 @@ void MathMacro::draw(PainterInfo & pi, int x, int y) const
                drawMarkers2(pi, expx, expy);
        } else {
                bool drawBox = lyxrc.macro_edit_style == 
LyXRC::MACRO_EDIT_INLINE_BOX;
-               MacroData const * macro = 
MacroTable::globalMacros().get(name());
-               bool upshape = macro && macro->symbol()
-                               && macro->symbol()->extra == "textmode";
+               bool user_macro = !MacroTable::globalMacros().get(name());
+               bool upshape = user_macro ? false : d->macro_ && 
d->macro_->symbol()
+                               && d->macro_->symbol()->extra == "textmode";
                Changer dummy = pi.base.font.changeShape(upshape ? UP_SHAPE
                                                        : pi.base.font.shape());
 
@@ -930,11 +930,11 @@ bool MathMacro::folded() const
 
 void MathMacro::write(WriteStream & os) const
 {
-       MacroData const * macro = MacroTable::globalMacros().get(name());
-       bool textmode_macro = macro && macro->symbol()
-                               && macro->symbol()->extra == "textmode";
-       bool needs_mathmode = macro && (!macro->symbol()
-                               || macro->symbol()->extra != "textmode");
+       bool user_macro = !MacroTable::globalMacros().get(name());
+       bool textmode_macro = user_macro ? false : d->macro_ && 
d->macro_->symbol()
+                               && d->macro_->symbol()->extra == "textmode";
+       bool needs_mathmode = user_macro ? bool(d->macro_) : d->macro_ && 
(!d->macro_->symbol()
+                               || d->macro_->symbol()->extra != "textmode");
 
        MathEnsurer ensurer(os, needs_mathmode, true, textmode_macro);
 

Reply via email to