]> git.lyx.org Git - features.git/blobdiff - src/mathed/InsetMathMacro.cpp
Fix broken Apple speller interface
[features.git] / src / mathed / InsetMathMacro.cpp
index f6efc70cf7702582edbe66531d042850ffb3b7c9..7c9efa4859c0d2e49d1f45a0ddf92c72bb76dc0a 100644 (file)
@@ -511,7 +511,10 @@ void InsetMathMacro::cursorPos(BufferView const & bv,
 
 bool InsetMathMacro::editMode(BufferView const * bv) const {
        // find this in cursor trace
-       Cursor const & cur = bv->cursor();
+       DocIterator const & cur =
+               // Do not move the reference while selecting with the mouse to avoid
+               // flicker due to changing metrics
+               bv->mouseSelecting() ? bv->cursor().realAnchor() : bv->cursor();
        for (size_t i = 0; i != cur.depth(); ++i)
                if (&cur[i].inset() == this) {
                        // look if there is no other macro in edit mode above
@@ -1309,6 +1312,9 @@ void InsetMathMacro::infoize2(odocstream & os) const
 
 bool InsetMathMacro::completionSupported(Cursor const & cur) const
 {
+       if (cur.buffer()->isReadonly())
+               return false;
+
        if (displayMode() != DISPLAY_UNFOLDED)
                return InsetMathNest::completionSupported(cur);
 
@@ -1319,6 +1325,9 @@ bool InsetMathMacro::completionSupported(Cursor const & cur) const
 
 bool InsetMathMacro::inlineCompletionSupported(Cursor const & cur) const
 {
+       if (cur.buffer()->isReadonly())
+               return false;
+
        if (displayMode() != DISPLAY_UNFOLDED)
                return InsetMathNest::inlineCompletionSupported(cur);
 
@@ -1360,22 +1369,24 @@ docstring InsetMathMacro::completionPrefix(Cursor const & cur) const
        if (displayMode() != DISPLAY_UNFOLDED)
                return InsetMathNest::completionPrefix(cur);
 
-       if (!completionSupported(cur))
-               return docstring();
-
        return "\\" + name();
 }
 
 
-bool InsetMathMacro::insertCompletion(Cursor & cur, docstring const & s,
-                                       bool finished)
+bool InsetMathMacro::insertCompletion(Cursor & cur, docstring const & s, bool finished)
 {
+       if (cur.buffer()->isReadonly())
+               return false;
+
        if (displayMode() != DISPLAY_UNFOLDED)
                return InsetMathNest::insertCompletion(cur, s, finished);
 
        if (!completionSupported(cur))
                return false;
 
+       // Contrary to Text, the whole inset should be recorded (#12581).
+       cur.recordUndoInset();
+
        // append completion
        docstring newName = name() + s;
        asArray(newName, cell(0));