commit 17576fb83b5a560fb8a1c59ca7051dcb2b165c05
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Thu Sep 20 22:15:12 2018 +0200

    Avoid crash with cursor down in math
    
    This can happen when the inset that contains the cursor is outside of
    the screen.
    
    THis is only a workaround. The real solution would be a
    processUpdateFlags(FitCursor) call, but the code is not ready for that
    yet.
    
    Fixes bug #11296.
---
 src/mathed/InsetMathGrid.cpp |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp
index cb6f440..58784ad 100644
--- a/src/mathed/InsetMathGrid.cpp
+++ b/src/mathed/InsetMathGrid.cpp
@@ -22,6 +22,7 @@
 #include "Buffer.h"
 #include "BufferParams.h"
 #include "BufferView.h"
+#include "CoordCache.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
 #include "FuncRequest.h"
@@ -969,7 +970,14 @@ bool InsetMathGrid::idxUpDown(Cursor & cur, bool up) const
                LASSERT(cur.idx() > 0, return false);
                --cur.idx();
        }
-       cur.pos() = cur.cell().x2pos(&cur.bv(), cur.x_target() - 
cur.cell().xo(cur.bv()));
+       // FIXME: this is only a workaround to avoid a crash if the inset
+       // in not in coord cache. The best would be to force a FitCursor
+       // operation.
+       CoordCache::Arrays const & arraysCache = cur.bv().coordCache().arrays();
+       if (arraysCache.has(&cur.cell()))
+               cur.pos() = cur.cell().x2pos(&cur.bv(), cur.x_target() - 
cur.cell().xo(cur.bv()));
+       else
+               cur.pos() = 0;
        return true;
 }
 

Reply via email to