BufferView * bv = &cur.bv();
TextMetrics & tm = bv->textMetrics(this);
- if (!tm.contains(cur.pit()))
+ if (!tm.contains(cur.pit())) {
lyx::dispatch(FuncRequest(LFUN_SCREEN_RECENTER));
+ tm = bv->textMetrics(this);
+ }
// FIXME: We use the update flag to indicates wether a singlePar or a
// full screen update is needed. We reset it here but shall we restore it
// trigger InstantPreview now
if (inset->lyxCode() == EXTERNAL_CODE) {
- InsetExternal & ins = static_cast<InsetExternal &>(*inset);
+ InsetExternal & ins =
+ static_cast<InsetExternal &>(*inset);
ins.updatePreview();
}
}
if (arg.empty()) {
if (theClipboard().isInternal())
pasteFromStack(cur, bv->buffer().errorList("Paste"), 0);
- else if (theClipboard().hasGraphicsContents())
+ else if (theClipboard().hasGraphicsContents()
+ && !theClipboard().hasTextContents())
pasteClipboardGraphics(cur, bv->buffer().errorList("Paste"));
else
pasteClipboardText(cur, bv->buffer().errorList("Paste"));
cmd.argument() == "paragraph");
break;
+ case LFUN_SELECTION_PASTE:
+ // 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");
+ break;
+
case LFUN_UNICODE_INSERT: {
if (cmd.argument().empty())
break;
case mouse_button::button2:
// Middle mouse pasting.
bv->mouseSetCursor(cur);
- if (!cap::selection()) {
- // There is no local selection in the current buffer, so try to
- // paste primary selection instead.
- lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE,
- "paragraph"));
- // Nothing else to do.
- cur.noUpdate();
- return;
- }
- // 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"));
- cur.updateFlags(Update::Force | Update::FitCursor);
- bv->buffer().errors("Paste");
- bv->buffer().markDirty();
- bv->cursor().finishUndo();
+ lyx::dispatch(
+ FuncRequest(LFUN_COMMAND_ALTERNATIVES,
+ "selection-paste ; primary-selection-paste paragraph"));
+ cur.noUpdate();
break;
case mouse_button::button3: {
cur.resetAnchor();
moveCursor(cur, false);
+ bv->bookmarkEditPosition();
break;
}
case LFUN_FLEX_INSERT:
case LFUN_BOX_INSERT:
case LFUN_BRANCH_INSERT:
+ case LFUN_PHANTOM_INSERT:
case LFUN_ERT_INSERT:
case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT:
code = LABEL_CODE;
else if (cmd.argument() == "note")
code = NOTE_CODE;
+ else if (cmd.argument() == "phantom")
+ code = PHANTOM_CODE;
else if (cmd.argument() == "ref")
code = REF_CODE;
else if (cmd.argument() == "space")
if (cur.buffer()->masterBuffer()->params().branchlist().empty())
enable = false;
break;
+ case LFUN_PHANTOM_INSERT:
+ code = PHANTOM_CODE;
+ break;
case LFUN_LABEL_INSERT:
code = LABEL_CODE;
break;
enable = cur.selection() || !theSelection().empty();
break;
+ case LFUN_SELECTION_PASTE:
+ enable = cap::selection();
+ break;
+
case LFUN_PARAGRAPH_MOVE_UP:
enable = cur.pit() > 0 && !cur.selection();
break;
enable = !inDescriptionItem(cur);
break;
+ case LFUN_MATH_INSERT:
+ case LFUN_MATH_MATRIX:
+ case LFUN_MATH_DELIM:
+ case LFUN_MATH_BIGDELIM:
+ // not allowed in ERT, for example.
+ enable = cur.inset().insetAllowed(MATH_CODE);
+ break;
+
case LFUN_WORD_DELETE_FORWARD:
case LFUN_WORD_DELETE_BACKWARD:
case LFUN_LINE_DELETE:
case LFUN_MATH_DISPLAY:
case LFUN_MATH_MODE:
case LFUN_MATH_MACRO:
- 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: