X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2Fmath_nestinset.C;h=3d54c3f35b9f77f7021e34e2b1b8647cd9959bc8;hb=2c30e9b17afc036515a3d23fb657c4f55815d7c5;hp=e5b88bab5e2b61266bb6a5b412391100277d32cb;hpb=1b411d8e9cc2e0a712cad317fb7820221cae69c5;p=lyx.git diff --git a/src/mathed/math_nestinset.C b/src/mathed/math_nestinset.C index e5b88bab5e..3d54c3f35b 100644 --- a/src/mathed/math_nestinset.C +++ b/src/mathed/math_nestinset.C @@ -51,6 +51,7 @@ #include "frontends/Dialogs.h" #include "frontends/LyXView.h" #include "frontends/Painter.h" +#include "frontends/nullpainter.h" #include @@ -219,9 +220,6 @@ void MathNestInset::draw(PainterInfo & pi, int x, int y) const void MathNestInset::drawSelection(PainterInfo & pi, int x, int y) const { - // FIXME: hack to get position cache warm - draw(pi, x, y); - // this should use the x/y values given, not the cached values LCursor & cur = pi.base.bv->cursor(); if (!cur.selection()) @@ -229,6 +227,12 @@ void MathNestInset::drawSelection(PainterInfo & pi, int x, int y) const if (!ptr_cmp(&cur.inset(), this)) return; + // FIXME: hack to get position cache warm + static NullPainter nop; + PainterInfo pinop(pi); + pinop.pain = nop; + draw(pinop, x, y); + CursorSlice s1 = cur.selBegin(); CursorSlice s2 = cur.selEnd(); //lyxerr << "MathNestInset::drawing selection: " @@ -708,6 +712,7 @@ void MathNestInset::doDispatch(LCursor & cur, FuncRequest & cmd) // do superscript if LyX handles // deadkeys recordUndo(cur, Undo::ATOMIC); + safe_ = grabAndEraseSelection(cur); script(cur, true); } break; @@ -879,16 +884,8 @@ void MathNestInset::doDispatch(LCursor & cur, FuncRequest & cmd) // math-insert only handles special math things like "matrix". case LFUN_INSERT_MATH: { recordUndo(cur, Undo::ATOMIC); - MathArray ar; - asArray(cmd.argument, ar); - int cell(0); - if (cmd.argument == "\\root") - cell = 1; - // math macros are nest insets and may have 0 cells. - // handleNest would crash in this case. - if (ar.size() == 1 && (ar[0].nucleus()->asNestInset()) && - ar[0].nucleus()->nargs() > MathInset::idx_type(cell)) { - cur.handleNest(ar[0], cell); + if (cmd.argument == "^" || cmd.argument == "_") { + interpret(cur, cmd.argument[0]); } else cur.niceInsert(cmd.argument); break; @@ -1096,6 +1093,9 @@ void MathNestInset::lfunMouseRelease(LCursor & cur, FuncRequest & cmd) bool MathNestInset::interpret(LCursor & cur, char c) { //lyxerr << "interpret 2: '" << c << "'" << endl; + if (c == '^' || c == '_') + safe_ = grabAndEraseSelection(cur); + cur.clearTargetX(); // handle macroMode @@ -1248,7 +1248,6 @@ bool MathNestInset::script(LCursor & cur, bool up) } cur.macroModeClose(); - string safe = grabAndEraseSelection(cur); if (asScriptInset() && cur.idx() == 0) { // we are in a nucleus of a script inset, move to _our_ script MathScriptInset * inset = asScriptInset(); @@ -1279,9 +1278,9 @@ bool MathNestInset::script(LCursor & cur, bool up) cur.idx() = 1; cur.pos() = 0; } - //lyxerr << "pasting 1: safe:\n" << safe << endl; - cur.paste(safe); + //lyxerr << "inserting 1: safe:\n" << safe_ << endl; + cur.niceInsert(safe_); cur.resetAnchor(); - //lyxerr << "pasting 2: safe:\n" << safe << endl; + //lyxerr << "inserting 2: safe:\n" << safe_ << endl; return true; }