From 17576fb83b5a560fb8a1c59ca7051dcb2b165c05 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Thu, 20 Sep 2018 22:15:12 +0200 Subject: [PATCH] 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 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mathed/InsetMathGrid.cpp b/src/mathed/InsetMathGrid.cpp index cb6f440539..58784ad79b 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; } -- 2.39.2