]> git.lyx.org Git - features.git/blobdiff - src/mathed/InsetMathNest.cpp
Revert part of 503c7c16: InsetMathNest:edit resets anchor.
[features.git] / src / mathed / InsetMathNest.cpp
index c6ea58577ede1502ae4d4fc061456cb8f156c531..7241e0bc3bd4e065f7e64bf886731938ce5cc8a6 100644 (file)
@@ -780,8 +780,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxNext(cur)) {
-                       cur.idx() = firstIdx();
-                       cur.pos() = 0;
+                       if (cur.lastidx() == 0)
+                               cur.popForward();
+                       else {
+                               cur.idx() = firstIdx();
+                               cur.pos() = 0;
+                       }
                }
                break;
 
@@ -791,8 +795,12 @@ void InsetMathNest::doDispatch(Cursor & cur, FuncRequest & cmd)
                cur.clearTargetX();
                cur.macroModeClose();
                if (!cur.inset().idxPrev(cur)) {
-                       cur.idx() = lastIdx();
-                       cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       if (cur.lastidx() == 0)
+                               cur.popBackward();
+                       else {
+                               cur.idx() = cur.lastidx();
+                               cur.pos() = lyxrc.mac_like_cursor_movement ? cur.lastpos() : 0;
+                       }
                }
                break;
 
@@ -1665,10 +1673,10 @@ void InsetMathNest::lfunMouseRelease(Cursor & cur, FuncRequest & cmd)
 
 bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
 {
-        // try auto-correction
-        if (lyxrc.autocorrection_math && cur.pos() != 0
-                  && math_autocorrect(cur, c))
-                return true;
+       // try auto-correction
+       if (lyxrc.autocorrection_math && cur.pos() != 0 && !cur.selection()
+            && math_autocorrect(cur, c))
+               return true;
 
        //lyxerr << "interpret 2: '" << c << "'" << endl;
        docstring save_selection;
@@ -1895,10 +1903,16 @@ bool InsetMathNest::interpretChar(Cursor & cur, char_type const c)
                        return true;
                }
                if (currentMode() == InsetMath::MATH_MODE && Encodings::isUnicodeTextOnly(c)) {
-                       MathAtom at = createInsetMath("text", buf);
-                       at.nucleus()->cell(0).push_back(MathAtom(new InsetMathChar(c)));
-                       cur.insert(at);
-                       cur.posForward();
+                       MathAtom const atom(new InsetMathChar(c));
+                       if (cur.prevInset() && cur.prevInset()->asInsetMath()->name() == "text") {
+                               // reuse existing \text inset
+                               cur.prevInset()->asInsetMath()->cell(0).push_back(atom);
+                       } else {
+                               MathAtom at = createInsetMath("text", buf);
+                               at.nucleus()->cell(0).push_back(atom);
+                               cur.insert(at);
+                               cur.posForward();
+                       }
                        return true;
                }
        } else {