#include "insets/InsetGraphics.h"
#include "insets/InsetGraphicsParams.h"
#include "insets/InsetInfo.h"
+#include "insets/InsetIndexMacro.h"
#include "insets/InsetIPAMacro.h"
#include "insets/InsetNewline.h"
#include "insets/InsetQuotes.h"
static bool doInsertInset(Cursor & cur, Text * text,
- FuncRequest const & cmd, bool edit, bool pastesel)
+ FuncRequest const & cmd, bool edit,
+ bool pastesel, bool resetfont = false)
{
Buffer & buffer = cur.bv().buffer();
BufferParams const & bparams = buffer.params();
cur.clearSelection(); // bug 393
cur.finishUndo();
if (inset_text) {
+ if (resetfont) {
+ // Reset of font (not language) is requested.
+ // Used by InsetIndex (#11961).
+ Language const * lang = cur.getFont().language();
+ Font font(bparams.getFont().fontInfo(), lang);
+ cur.paragraph().resetFonts(font);
+ }
inset_text->fixParagraphsFont();
cur.pos() = 0;
cur.pit() = 0;
case LFUN_UP:
case LFUN_DOWN: {
// stop/start the selection
- bool const select = cmd.action() == LFUN_DOWN_SELECT
- || cmd.action() == LFUN_UP_SELECT;
+ bool select = cmd.action() == LFUN_DOWN_SELECT ||
+ cmd.action() == LFUN_UP_SELECT;
+
// move cursor up/down
- bool const up = cmd.action() == LFUN_UP_SELECT || cmd.action() == LFUN_UP;
+ bool up = cmd.action() == LFUN_UP_SELECT || cmd.action() == LFUN_UP;
+ bool const atFirstOrLastRow = cur.atFirstOrLastRow(up);
- if (!cur.atFirstOrLastRow(up)) {
+ if (!atFirstOrLastRow) {
needsUpdate |= cur.selHandle(select);
cur.upDownInText(up, needsUpdate);
needsUpdate |= cur.beforeDispatchCursor().inMathed();
cur.forceBufferUpdate();
break;
}
- needsUpdate |= cur.selHandle(select);
- bool const can_move = cur.upDownInText(up, needsUpdate);
- // if the cursor can be moved up or down at an upper level,
- // delegate the dispatch to next level. Otherwise, we are
- // done.
- if (can_move) {
- cmd = FuncRequest(up ? LFUN_FINISHED_UP : LFUN_FINISHED_DOWN);
- cur.undispatched();
- }
- }
-
- break;
- }
-
- case LFUN_FINISHED_UP:
- case LFUN_FINISHED_DOWN: {
- // move cursor up/down
- bool const up = cmd.action() == LFUN_FINISHED_UP;
- if (!cur.atFirstOrLastRow(up)) {
+ // if the cursor cannot be moved up or down do not remove
+ // the selection right now, but wait for the next dispatch.
+ if (select)
+ needsUpdate |= cur.selHandle(select);
cur.upDownInText(up, needsUpdate);
- needsUpdate |= cur.beforeDispatchCursor().inMathed();
- } else {
- bool const can_move = cur.upDownInText(up, needsUpdate);
- // if the cursor can be moved up or down and we are not
- // moving cusor at top level, wait for the next dispatch.
- // Otherwise, we are done.
- if (can_move)
- cur.undispatched();
+ cur.undispatched();
}
break;
bvcur.resetAnchor();
if (!bv->mouseSetCursor(cur, cmd.modifier() == ShiftModifier))
cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
- if (bvcur.wordSelection())
- selectWord(bvcur, WHOLE_WORD);
+ // FIXME: move this to mouseSetCursor?
+ if (bvcur.wordSelection() && bvcur.inTexted())
+ expandWordSel(bvcur);
break;
case mouse_button::button2:
// We continue with our existing selection or start a new one, so don't
// reset the anchor.
bvcur.setCursor(cur);
+ if (bvcur.wordSelection() && bvcur.inTexted())
+ expandWordSel(bvcur);
bvcur.selection(true);
bvcur.setCurrentFont();
if (cur.top() == old) {
case LFUN_BRANCH_INSERT:
case LFUN_PHANTOM_INSERT:
case LFUN_ERT_INSERT:
+ case LFUN_INDEXMACRO_INSERT:
case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT:
case LFUN_ARGUMENT_INSERT:
case LFUN_INDEX_INSERT:
case LFUN_PREVIEW_INSERT:
case LFUN_SCRIPT_INSERT:
- case LFUN_IPA_INSERT:
+ case LFUN_IPA_INSERT: {
+ // Indexes reset font formatting (#11961)
+ bool const resetfont = cmd.action() == LFUN_INDEX_INSERT;
// Open the inset, and move the current selection
// inside it.
- doInsertInset(cur, this, cmd, true, true);
+ doInsertInset(cur, this, cmd, true, true, resetfont);
cur.posForward();
cur.setCurrentFont();
// Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend.
cur.forceBufferUpdate();
break;
+ }
case LFUN_FLEX_INSERT: {
// Open the inset, and move the current selection
break;
case LFUN_FLEX_INSERT: {
code = FLEX_CODE;
- string s = cmd.getArg(0);
- InsetLayout il =
- cur.buffer()->params().documentClass().insetLayout(from_utf8(s));
- if (il.lyxtype() != InsetLyXType::CHARSTYLE &&
- il.lyxtype() != InsetLyXType::CUSTOM &&
- il.lyxtype ()!= InsetLyXType::STANDARD)
+ docstring s = from_utf8(cmd.getArg(0));
+ // Prepend "Flex:" prefix if not there
+ if (!prefixIs(s, from_ascii("Flex:")))
+ s = from_ascii("Flex:") + s;
+ if (!cur.buffer()->params().documentClass().hasInsetLayout(s))
enable = false;
- break;
+ else {
+ InsetLyXType ilt =
+ cur.buffer()->params().documentClass().insetLayout(s).lyxtype();
+ if (ilt != InsetLyXType::CHARSTYLE
+ && ilt != InsetLyXType::CUSTOM
+ && ilt != InsetLyXType::STANDARD)
+ enable = false;
}
+ break;
+ }
case LFUN_BOX_INSERT:
code = BOX_CODE;
break;
}
code = HYPERLINK_CODE;
break;
+ case LFUN_INDEXMACRO_INSERT: {
+ string const arg = cmd.getArg(0);
+ if (arg == "sortkey")
+ code = INDEXMACRO_SORTKEY_CODE;
+ else
+ code = INDEXMACRO_CODE;
+ break;
+ }
case LFUN_IPAMACRO_INSERT: {
string const arg = cmd.getArg(0);
if (arg == "deco")
docstring const req_layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : cmd.argument();
docstring const layout = resolveLayout(req_layout, cur);
- enable = !owner_->forcePlainLayout() && !layout.empty();
- status.setOnOff(!owner_->forcePlainLayout() && isAlreadyLayout(layout, cur));
+ // FIXME: make this work in multicell selection case
+ enable = !owner_->forcePlainLayout() && !layout.empty() && !cur.selIsMultiCell();
+ status.setOnOff(!owner_->forcePlainLayout() && !cur.selIsMultiCell()
+ && isAlreadyLayout(layout, cur));
break;
}