X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FText3.cpp;h=e730e268a198de167006eda687888b3242c18221;hb=8db4a8dd4663cdd6a3cf67777ea2538a380d0dd2;hp=c02773c77ea0861de52c7d455e34e7015dc705aa;hpb=3a5c55e30d4e2a41a9b82d1699c8db8c2b9fe5de;p=lyx.git diff --git a/src/Text3.cpp b/src/Text3.cpp index c02773c77e..e730e268a1 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -71,6 +71,10 @@ #include #include +using std::endl; +using std::string; +using std::istringstream; +using std::ostringstream; namespace lyx { @@ -79,19 +83,13 @@ using cap::cutSelection; using cap::pasteFromStack; using cap::pasteClipboard; using cap::replaceSelection; -using cap::saveSelection; using support::isStrUnsignedInt; using support::token; -using std::endl; -using std::string; -using std::istringstream; -using std::ostringstream; - - -extern string current_layout; - +namespace frontend { +extern docstring current_layout; +} namespace { @@ -119,8 +117,6 @@ namespace { { if (selecting || cur.mark()) cur.setSelection(); - saveSelection(cur); - cur.bv().switchKeyMap(); } @@ -378,17 +374,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) recUndo(cur, pit, pit + 1); finishUndo(); std::swap(pars_[pit], pars_[pit + 1]); - - ParIterator begin(cur); - // begin.pos() (== cur.pos()) may point beyond the end of the - // paragraph referenced by begin. This would cause a crash - // in updateLabels() - begin.pos() = 0; - ++cur.pit(); - ParIterator end = boost::next(ParIterator(cur)); - updateLabels(cur.buffer(), begin, end); - + updateLabels(cur.buffer()); needsUpdate = true; + ++cur.pit(); break; } @@ -397,17 +385,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) recUndo(cur, pit - 1, pit); finishUndo(); std::swap(pars_[pit], pars_[pit - 1]); - - ParIterator end = ParIterator(cur); - // end.pos() (== cur.pos()) may point beyond the end of the - // paragraph referenced by end. This would cause a crash - // in boost::next() - end.pos() = 0; - end = boost::next(end); + updateLabels(cur.buffer()); --cur.pit(); - ParIterator begin(cur); - updateLabels(cur.buffer(), begin, end); - needsUpdate = true; break; } @@ -416,11 +395,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) Paragraph & par = cur.paragraph(); bool start = !par.params().startOfAppendix(); -#ifdef WITH_WARNINGS -#warning The code below only makes sense at top level. +// FIXME: The code below only makes sense at top level. // Should LFUN_APPENDIX be restricted to top-level paragraphs? -#endif // ensure that we have only one start_of_appendix in this document + // FIXME: this don't work for multipart document! for (pit_type tmp = 0, end = pars_.size(); tmp != end; ++tmp) { if (pars_[tmp].params().startOfAppendix()) { recUndo(cur, tmp); @@ -438,20 +416,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } case LFUN_WORD_DELETE_FORWARD: - cur.clearSelection(); - deleteWordForward(cur); + if (cur.selection()) { + cutSelection(cur, true, false); + } else + deleteWordForward(cur); finishChange(cur, false); break; case LFUN_WORD_DELETE_BACKWARD: - cur.clearSelection(); - deleteWordBackward(cur); + if (cur.selection()) { + cutSelection(cur, true, false); + } else + deleteWordBackward(cur); finishChange(cur, false); break; case LFUN_LINE_DELETE: - cur.clearSelection(); - deleteLineForward(cur); + if (cur.selection()) { + cutSelection(cur, true, false); + } else + deleteLineForward(cur); finishChange(cur, false); break; @@ -489,8 +473,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) && cur.boundary() == oldBoundary) { cur.undispatched(); cmd = FuncRequest(LFUN_FINISHED_RIGHT); - } else if (cur.selection()) - saveSelection(cur); + } break; case LFUN_CHAR_BACKWARD: @@ -507,31 +490,30 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cur.undispatched(); cmd = FuncRequest(LFUN_FINISHED_LEFT); } - if (cur.selection()) - saveSelection(cur); break; + case LFUN_UP_SELECT: + case LFUN_DOWN_SELECT: case LFUN_UP: - case LFUN_UP_SELECT: { - //lyxerr << "handle LFUN_UP[SEL]:\n" << cur << endl; - needsUpdate |= cur.selHandle(cmd.action == LFUN_UP_SELECT); - bool const successful = cur.upDownInText(true, needsUpdate); - if (!successful) - cur.undispatched(); - if (cur.selection()) - saveSelection(cur); - break; - } - - case LFUN_DOWN: - case LFUN_DOWN_SELECT: { - //lyxerr << "handle LFUN_DOWN[SEL]:\n" << cur << endl; - needsUpdate |= cur.selHandle(cmd.action == LFUN_DOWN_SELECT); - bool const successful = cur.upDownInText(false, needsUpdate); - if (!successful) + case LFUN_DOWN: { + // stop/start the selection + bool select = cmd.action == LFUN_DOWN_SELECT || + cmd.action == LFUN_UP_SELECT; + cur.selHandle(select); + + // move cursor up/down + bool up = cmd.action == LFUN_UP_SELECT || cmd.action == LFUN_UP; + bool const successful = cur.upDownInText(up, needsUpdate); + if (successful) { + // notify insets which were left and get their update flags + notifyCursorLeaves(cur.beforeDispatchCursor(), cur); + cur.fixIfBroken(); + + // redraw if you leave mathed (for the decorations) + needsUpdate |= cur.beforeDispatchCursor().inMathed(); + } else cur.undispatched(); - if (cur.selection()) - saveSelection(cur); + break; } @@ -539,16 +521,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_PARAGRAPH_UP_SELECT: needsUpdate |= cur.selHandle(cmd.action == LFUN_PARAGRAPH_UP_SELECT); needsUpdate |= cursorUpParagraph(cur); - if (cur.selection()) - saveSelection(cur); break; case LFUN_PARAGRAPH_DOWN: case LFUN_PARAGRAPH_DOWN_SELECT: needsUpdate |= cur.selHandle(cmd.action == LFUN_PARAGRAPH_DOWN_SELECT); needsUpdate |= cursorDownParagraph(cur); - if (cur.selection()) - saveSelection(cur); break; case LFUN_SCREEN_UP: @@ -559,8 +537,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) else { cursorPrevious(cur); } - if (cur.selection()) - saveSelection(cur); break; case LFUN_SCREEN_DOWN: @@ -572,8 +548,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) else { cursorNext(cur); } - if (cur.selection()) - saveSelection(cur); break; case LFUN_LINE_BEGIN: @@ -586,8 +560,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_LINE_END_SELECT: needsUpdate |= cur.selHandle(cmd.action == LFUN_LINE_END_SELECT); needsUpdate |= cursorEnd(cur); - if (cur.selection()) - saveSelection(cur); break; case LFUN_WORD_FORWARD: @@ -597,8 +569,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) needsUpdate |= cursorLeftOneWord(cur); else needsUpdate |= cursorRightOneWord(cur); - if (cur.selection()) - saveSelection(cur); break; case LFUN_WORD_BACKWARD: @@ -608,8 +578,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) needsUpdate |= cursorRightOneWord(cur); else needsUpdate |= cursorLeftOneWord(cur); - if (cur.selection()) - saveSelection(cur); break; case LFUN_WORD_SELECT: { @@ -679,15 +647,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cutSelection(cur, true, false); singleParUpdate = false; } - bv->switchKeyMap(); break; case LFUN_DELETE_BACKWARD_SKIP: // Reverse the effect of LFUN_BREAK_PARAGRAPH_SKIP. if (!cur.selection()) { -#ifdef WITH_WARNINGS -#warning look here -#endif + // FIXME: look here //CursorSlice cur = cursor(); backspace(cur); //anchor() = cur; @@ -700,14 +665,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cap::replaceSelection(cur); breakParagraph(cur, 0); cur.resetAnchor(); - bv->switchKeyMap(); break; case LFUN_BREAK_PARAGRAPH_KEEP_LAYOUT: cap::replaceSelection(cur); breakParagraph(cur, 1); cur.resetAnchor(); - bv->switchKeyMap(); break; case LFUN_BREAK_PARAGRAPH_SKIP: { @@ -719,10 +682,13 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) else breakParagraph(cur, 0); cur.resetAnchor(); - bv->switchKeyMap(); break; } + // TODO + // With the creation of LFUN_PARAGRAPH_PARAMS, this is now redundant, + // as its duties can be performed there. Should it be removed?? + // FIXME For now, it can just dispatch LFUN_PARAGRAPH_PARAMS... case LFUN_PARAGRAPH_SPACING: { Paragraph & par = cur.paragraph(); Spacing::Space cur_spacing = par.params().spacing().getSpace(); @@ -788,6 +754,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) dispatch(cur, fr); } */ + if (cur.selection()) + cutSelection(cur, true, false); insertInset(cur, inset); cur.posRight(); } @@ -852,17 +820,16 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cur.message(_("Paste")); cap::replaceSelection(cur); if (cmd.argument().empty() && !theClipboard().isInternal()) - pasteClipboard(cur, bv->buffer()->errorList("Paste")); + pasteClipboard(cur, bv->buffer().errorList("Paste")); else { string const arg(to_utf8(cmd.argument())); - pasteFromStack(cur, bv->buffer()->errorList("Paste"), + pasteFromStack(cur, bv->buffer().errorList("Paste"), isStrUnsignedInt(arg) ? convert(arg) : 0); } - bv->buffer()->errors("Paste"); + bv->buffer().errors("Paste"); cur.clearSelection(); // bug 393 - bv->switchKeyMap(); finishUndo(); break; @@ -905,23 +872,23 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; case LFUN_SERVER_GET_LAYOUT: - cur.message(from_utf8(cur.paragraph().layout()->name())); + cur.message(cur.paragraph().layout()->name()); break; case LFUN_LAYOUT: { - string layout = to_ascii(cmd.argument()); - LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << layout << endl; + docstring layout = cmd.argument(); + LYXERR(Debug::INFO) << "LFUN_LAYOUT: (arg) " << to_utf8(layout) << endl; // Derive layout number from given argument (string) // and current buffer's textclass (number) - TextClass const & tclass = bv->buffer()->params().getTextClass(); + TextClass const & tclass = bv->buffer().params().getTextClass(); if (layout.empty()) layout = tclass.defaultLayoutName(); bool hasLayout = tclass.hasLayout(layout); // If the entry is obsolete, use the new one instead. if (hasLayout) { - string const & obs = tclass[layout]->obsoleted_by(); + docstring const & obs = tclass[layout]->obsoleted_by(); if (!obs.empty()) layout = obs; } @@ -932,7 +899,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; } - bool change_layout = (current_layout != layout); + bool change_layout = (frontend::current_layout != layout); if (!change_layout && cur.selection() && cur.selBegin().pit() != cur.selEnd().pit()) @@ -940,7 +907,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) pit_type spit = cur.selBegin().pit(); pit_type epit = cur.selEnd().pit() + 1; while (spit != epit) { - if (pars_[spit].layout()->name() != current_layout) { + if (pars_[spit].layout()->name() != frontend::current_layout) { change_layout = true; break; } @@ -949,20 +916,18 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } if (change_layout) { - current_layout = layout; setLayout(cur, layout); // inform the GUI that the layout has changed. bv->layoutChanged(layout); - bv->switchKeyMap(); } break; } case LFUN_CLIPBOARD_PASTE: cur.clearSelection(); - pasteClipboard(cur, bv->buffer()->errorList("Paste"), + pasteClipboard(cur, bv->buffer().errorList("Paste"), cmd.argument() == "paragraph"); - bv->buffer()->errors("Paste"); + bv->buffer().errors("Paste"); break; case LFUN_PRIMARY_SELECTION_PASTE: @@ -976,7 +941,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) docstring hexstring = cmd.argument(); if (lyx::support::isHex(hexstring)) { char_type c = lyx::support::hexToInt(hexstring); - if (c > 32 && c < 0x10ffff) { + if (c >= 32 && c < 0x10ffff) { lyxerr << "Inserting c: " << c << endl; docstring s = docstring(1, c); lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, s)); @@ -988,7 +953,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_QUOTE_INSERT: { Paragraph & par = cur.paragraph(); pos_type pos = cur.pos(); - BufferParams const & bufparams = bv->buffer()->params(); + BufferParams const & bufparams = bv->buffer().params(); Layout_ptr const & style = par.layout(); if (!style->pass_thru && par.getFontSettings(bufparams, pos).language()->lang() != "hebrew") { @@ -1021,14 +986,13 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_DATE_INSERT: - if (cmd.argument().empty()) - lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, - formatted_time(current_time()))); - else - lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, - formatted_time(current_time(), to_utf8(cmd.argument())))); + case LFUN_DATE_INSERT: { + string const format = cmd.argument().empty() + ? lyxrc.date_insert_format : to_utf8(cmd.argument()); + string const time = formatted_time(current_time(), format); + lyx::dispatch(FuncRequest(LFUN_SELF_INSERT, time)); break; + } case LFUN_MOUSE_TRIPLE: if (cmd.button() == mouse_button::button1) { @@ -1037,7 +1001,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cursorEnd(cur); cur.setSelection(); bv->cursor() = cur; - saveSelection(cur); } break; @@ -1054,39 +1017,30 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) if (cmd.button() == mouse_button::button3) cur.clearSelection(); - // Middle button press pastes if we have a selection - // We do this here as if the selection was inside an inset - // it could get cleared on the unlocking of the inset so - // we have to check this first - bool paste_internally = false; - if (cmd.button() == mouse_button::button2 && cap::selection()) { - // Copy the selection buffer to the clipboard - // stack, because we want it to appear in the - // "Edit->Paste recent" menu. - cap::copySelectionToStack(); - paste_internally = true; - } + // Set the cursor + bool update = bv->mouseSetCursor(cur); // Insert primary selection with middle mouse // if there is a local selection in the current buffer, // insert this if (cmd.button() == mouse_button::button2) { - if (paste_internally) { - cap::pasteSelection(cur, bv->buffer()->errorList("Paste")); - bv->buffer()->errors("Paste"); - cur.clearSelection(); // bug 393 - bv->switchKeyMap(); - bv->buffer()->markDirty(); + if (cap::selection()) { + // Copy the selection buffer to the clipboard + // stack, because we want it to appear in the + // "Edit->Paste recent" menu. + cap::copySelectionToStack(); + + cap::pasteSelection(bv->cursor(), + bv->buffer().errorList("Paste")); + bv->buffer().errors("Paste"); + bv->buffer().markDirty(); finishUndo(); } else { - bv->mouseSetCursor(cur); lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph")); } } - // we have to update after dePM triggered - bool update = bv->mouseSetCursor(cur); - + // we have to update after dEPM triggered if (!update && cmd.button() == mouse_button::button1) { needsUpdate = false; cur.noUpdate(); @@ -1150,13 +1104,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) // but bvcur is current mouse position Cursor & bvcur = cur.bv().cursor(); bvcur.selection() = true; - saveSelection(bvcur); } needsUpdate = false; cur.noUpdate(); } - bv->switchKeyMap(); break; } @@ -1170,9 +1122,17 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) // "auto_region_delete", which defaults to // true (on). - if (lyxrc.auto_region_delete) - if (cur.selection()) - cutSelection(cur, false, false); + if (lyxrc.auto_region_delete && cur.selection()) { + cutSelection(cur, false, false); + // When change tracking is set to off, the metrics update + // mechanism correctly detects if a full update is needed or not. + // This detection fails when a selection spans multiple rows and + // change tracking is enabled because the paragraph metrics stays + // the same. In this case, we force the full update: + // (see http://bugzilla.lyx.org/show_bug.cgi?id=3992) + if (cur.buffer().params().trackChanges) + cur.updateFlags(Update::Force); + } cur.clearSelection(); Font const old_font = real_current_font; @@ -1180,8 +1140,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) docstring::const_iterator cit = cmd.argument().begin(); docstring::const_iterator end = cmd.argument().end(); for (; cit != end; ++cit) - bv->getIntl().getTransManager(). - translateAndInsert(*cit, this, cur); + bv->translateAndInsert(*cit, this, cur); cur.resetAnchor(); moveCursor(cur, false); @@ -1190,15 +1149,39 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_URL_INSERT: { InsetCommandParams p("url"); + docstring content; + if (cur.selection()) { + content = cur.selectionAsString(false); + cutSelection(cur, true, false); + } + p["target"] = (cmd.argument().empty()) ? + content : cmd.argument(); string const data = InsetCommandMailer::params2string("url", p); - bv->showInsetDialog("url", data, 0); + if (p["target"].empty()) { + bv->showInsetDialog("url", data, 0); + } else { + FuncRequest fr(LFUN_INSET_INSERT, data); + dispatch(cur, fr); + } break; } case LFUN_HTML_INSERT: { InsetCommandParams p("htmlurl"); + docstring content; + if (cur.selection()) { + content = cur.selectionAsString(false); + cutSelection(cur, true, false); + } + p["target"] = (cmd.argument().empty()) ? + content : cmd.argument(); string const data = InsetCommandMailer::params2string("url", p); - bv->showInsetDialog("url", data, 0); + if (p["target"].empty()) { + bv->showInsetDialog("url", data, 0); + } else { + FuncRequest fr(LFUN_INSET_INSERT, data); + dispatch(cur, fr); + } break; } @@ -1229,7 +1212,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) // inside it. doInsertInset(cur, this, cmd, true, true); cur.posRight(); - updateLabels(*bv->buffer()); + updateLabels(bv->buffer()); break; case LFUN_NOTE_INSERT: case LFUN_CHARSTYLE_INSERT: @@ -1266,7 +1249,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cur.posRight(); ParagraphList & pars = cur.text()->paragraphs(); - TextClass const & tclass = bv->buffer()->params().getTextClass(); + TextClass const & tclass = bv->buffer().params().getTextClass(); // add a separate paragraph for the caption inset pars.push_back(Paragraph()); @@ -1373,8 +1356,14 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_MATH_MATRIX: case LFUN_MATH_DELIM: case LFUN_MATH_BIGDELIM: { + if (cur.selection()) + cur.clearSelection(); + // FIXME: instead of the above, this one + // should be used (but it asserts with Bidi enabled) + // cf. http://bugzilla.lyx.org/show_bug.cgi?id=4055 + // cap::replaceSelection(cur); cur.insert(new InsetMathHull(hullSimple)); - cur.dispatch(FuncRequest(LFUN_CHAR_FORWARD)); + checkAndActivateInset(cur, true); BOOST_ASSERT(cur.inMathed()); cur.dispatch(cmd); break; @@ -1449,7 +1438,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) Font font(Font::ALL_IGNORE); font.setLanguage(lang); toggleAndShow(cur, this, font); - bv->switchKeyMap(); break; } @@ -1524,16 +1512,15 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) theLyXFunc().handleKeyFunc(cmd.action); if (!cmd.argument().empty()) // FIXME: Are all these characters encoded in one byte in utf8? - bv->getIntl().getTransManager() - .translateAndInsert(cmd.argument()[0], this, cur); + bv->translateAndInsert(cmd.argument()[0], this, cur); break; case LFUN_FLOAT_LIST: { - TextClass const & tclass = bv->buffer()->params().getTextClass(); + TextClass const & tclass = bv->buffer().params().getTextClass(); if (tclass.floats().typeExist(to_utf8(cmd.argument()))) { - // not quite sure if we want this... recordUndo(cur); - cur.clearSelection(); + if (cur.selection()) + cutSelection(cur, true, false); breakParagraph(cur); if (cur.lastpos() != 0) { @@ -1542,7 +1529,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) } setLayout(cur, tclass.defaultLayoutName()); - setParagraph(cur, Spacing(), LYX_ALIGN_LAYOUT, docstring(), 0); + ParagraphParameters p; + setParagraphs(cur, p); insertInset(cur, new InsetFloatList(to_utf8(cmd.argument()))); cur.posRight(); } else { @@ -1580,17 +1568,21 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_PARAGRAPH_PARAMS_APPLY: { // Given data, an encoding of the ParagraphParameters // generated in the Paragraph dialog, this function sets - // the current paragraph appropriately. - istringstream is(to_utf8(cmd.argument())); - Lexer lex(0, 0); - lex.setStream(is); - ParagraphParameters params; - params.read(lex); - setParagraph(cur, - params.spacing(), - params.align(), - params.labelWidthString(), - params.noindent()); + // the current paragraph, or currently selected paragraphs, + // appropriately. + // NOTE: This function overrides all existing settings. + setParagraphs(cur, cmd.argument()); + cur.message(_("Paragraph layout set")); + break; + } + + case LFUN_PARAGRAPH_PARAMS: { + // Given data, an encoding of the ParagraphParameters as we'd + // find them in a LyX file, this function modifies the current paragraph, + // or currently selected paragraphs. + // NOTE: This function only modifies, and does not override, existing + // settings. + setParagraphs(cur, cmd.argument(), true); cur.message(_("Paragraph layout set")); break; } @@ -1598,7 +1590,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case LFUN_ESCAPE: if (cur.selection()) { cur.selection() = false; - saveSelection(cur); } else { cur.undispatched(); cmd = FuncRequest(LFUN_FINISHED_RIGHT); @@ -1905,7 +1896,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, break; case LFUN_INSET_DISSOLVE: - enable = !isMainText(*cur.bv().buffer()) && cur.inset().nargs() == 1; + enable = !isMainText(cur.bv().buffer()) && cur.inset().nargs() == 1; break; case LFUN_CHANGE_ACCEPT: @@ -1979,6 +1970,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, case LFUN_MATH_MATRIX: case LFUN_MATH_DELIM: case LFUN_MATH_BIGDELIM: + case LFUN_MATH_INSERT: case LFUN_MATH_SUBSCRIPT: case LFUN_MATH_SUPERSCRIPT: case LFUN_FONT_DEFAULT: @@ -2008,6 +2000,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, case LFUN_ACCENT_OGONEK: case LFUN_THESAURUS_ENTRY: case LFUN_PARAGRAPH_PARAMS_APPLY: + case LFUN_PARAGRAPH_PARAMS: case LFUN_ESCAPE: case LFUN_BUFFER_END: case LFUN_BUFFER_BEGIN: