]> git.lyx.org Git - features.git/blobdiff - src/Text3.cpp
Fix copy of multi-cells in table (#12196)
[features.git] / src / Text3.cpp
index 5c623fec9e54fabf053004ba0d9b2fc80bba528f..26d6d7136bbbe573e298de4bb64cc17081d3d83c 100644 (file)
@@ -2732,6 +2732,35 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        }
 
        case LFUN_SPELLING_ADD_LOCAL: {
+               Language const * language = getLanguage(cur, cmd.getArg(1));
+               docstring word = from_utf8(cmd.getArg(0));
+               if (word.empty()) {
+                       word = cur.selectionAsString(false);
+                       if (word.size() > 100)
+                               break;
+                       if (word.empty()) {
+                               // Get word or selection
+                               selectWordWhenUnderCursor(cur, WHOLE_WORD);
+                               word = cur.selectionAsString(false);
+                       }
+               }
+               WordLangTuple wl(word, language);
+               if (!bv->buffer().params().spellignored(wl)) {
+                       cur.recordUndoBufferParams();
+                       bv->buffer().params().spellignore().push_back(wl);
+                       cur.recordUndo();
+                       // trigger re-check
+                       WordLangTuple wl;
+                       docstring_list suggestions;
+                       Paragraph const & par = cur.paragraph();
+                       pos_type from = cur.pos();
+                       pos_type to = from;
+                       par.spellCheck(from, to, wl, suggestions, true, true);
+               }
+               break;
+       }
+
+       case LFUN_SPELLING_REMOVE_LOCAL: {
                Language const * language = getLanguage(cur, cmd.getArg(1));
                docstring word = from_utf8(cmd.getArg(0));
                if (word.empty()) {
@@ -2746,9 +2775,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                }
                WordLangTuple wl(word, language);
                bool has_item = false;
-               vector<WordLangTuple> il = bv->buffer().params().spellignore();
-               vector<WordLangTuple>::const_iterator it = il.begin();
-               for (; it != il.end(); ++it) {
+               vector<WordLangTuple>::const_iterator it = bv->buffer().params().spellignore().begin();
+               for (; it != bv->buffer().params().spellignore().end(); ++it) {
                        if (it->lang()->code() != wl.lang()->code())
                                continue;
                        if (it->word() == wl.word()) {
@@ -2756,9 +2784,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                break;
                        }
                }
-               if (!has_item) {
+               if (has_item) {
                        cur.recordUndoBufferParams();
-                       bv->buffer().params().spellignore().push_back(wl);
+                       bv->buffer().params().spellignore().erase(it);
                        cur.recordUndo();
                        // trigger re-check
                        WordLangTuple wl;
@@ -2770,7 +2798,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                }
                break;
        }
-       
+
 
        case LFUN_SPELLING_IGNORE: {
                Language const * language = getLanguage(cur, cmd.getArg(1));
@@ -3502,6 +3530,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
 
        case LFUN_SPELLING_ADD:
        case LFUN_SPELLING_ADD_LOCAL:
+       case LFUN_SPELLING_REMOVE_LOCAL:
        case LFUN_SPELLING_IGNORE:
        case LFUN_SPELLING_REMOVE:
                enable = theSpellChecker() != nullptr;
@@ -3519,7 +3548,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                docstring const layout = resolveLayout(req_layout, cur);
 
                enable = !owner_->forcePlainLayout() && !layout.empty();
-               status.setOnOff(isAlreadyLayout(layout, cur));
+               status.setOnOff(!owner_->forcePlainLayout() && isAlreadyLayout(layout, cur));
                break;
        }