#include "gettext.h"
#include "undo.h"
+#include "frontends/Clipboard.h"
#include "frontends/Painter.h"
#include "insets/mailinset.h"
case LFUN_PASTE: {
cur.message(_("Paste"));
cap::replaceSelection(cur);
- istringstream is(to_utf8(cmd.argument()));
- int n = 0;
- is >> n;
+ docstring topaste;
+ if (cmd.argument().empty() && !theClipboard().isInternal())
+ topaste = theClipboard().get();
+ else {
+ idocstringstream is(cmd.argument());
+ int n = 0;
+ is >> n;
+ topaste = cap::getSelection(cur.buffer(), n);
+ }
InsetMathGrid grid(1, 1);
- mathed_parse_normal(grid, cap::getSelection(cur.buffer(), n));
+ if (!topaste.empty())
+ mathed_parse_normal(grid, topaste);
+
if (grid.nargs() == 1) {
// single cell/part of cell
recordUndo(cur);
#include "support/lstrings.h"
+#include "frontends/Clipboard.h"
#include "frontends/Painter.h"
#include "frontends/Selection.h"
recordUndo(cur);
cur.message(_("Paste"));
replaceSelection(cur);
- size_t n = 0;
- istringstream is(to_utf8(cmd.argument()));
- is >> n;
- docstring const selection = cap::getSelection(cur.buffer(), n);
- cur.niceInsert(selection);
+ docstring topaste;
+ if (cmd.argument().empty() && !theClipboard().isInternal())
+ topaste = theClipboard().get();
+ else {
+ size_t n = 0;
+ idocstringstream is(cmd.argument());
+ is >> n;
+ topaste = cap::getSelection(cur.buffer(), n);
+ }
+ cur.niceInsert(topaste);
cur.clearSelection(); // bug 393
cur.bv().switchKeyMap();
finishUndo();
inset->edit(cur, true);
if (gotsel && pastesel) {
- lyx::dispatch(FuncRequest(LFUN_PASTE));
+ lyx::dispatch(FuncRequest(LFUN_PASTE, "0"));
// reset first par to default
if (cur.lastpit() != 0 || cur.lastpos() != 0) {
LyXLayout_ptr const layout =
case LFUN_PASTE:
cur.message(_("Paste"));
cap::replaceSelection(cur);
- if (isStrUnsignedInt(to_utf8(cmd.argument())))
- pasteSelection(cur, bv->buffer()->errorList("Paste"),
- convert<unsigned int>(to_utf8(cmd.argument())));
- else
+ if (cmd.argument().empty() && !theClipboard().isInternal())
+ pasteString(cur, theClipboard().get(), docstring());
+ else {
+ string const arg(to_utf8(cmd.argument()));
pasteSelection(cur, bv->buffer()->errorList("Paste"),
- 0);
- bv->buffer()->errors("Paste");
+ isStrUnsignedInt(arg) ?
+ convert<unsigned int>(arg) :
+ 0);
+ bv->buffer()->errors("Paste");
+ }
cur.clearSelection(); // bug 393
bv->switchKeyMap();
finishUndo();
// insert this
if (cmd.button() == mouse_button::button2) {
if (paste_internally)
- lyx::dispatch(FuncRequest(LFUN_PASTE));
+ lyx::dispatch(FuncRequest(LFUN_PASTE, "0"));
else
lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
}
break;
case LFUN_PASTE:
- enable = cap::numberOfSelections() > 0;
+ // FIXME: This is not correct, but the correct code below is
+ // expensive
+ enable = cap::numberOfSelections() > 0 ||
+ !theClipboard().isInternal();
+#if 0
+ if (cmd.argument().empty()) {
+ if (theClipboard().isInternal())
+ enable = cap::numberOfSelections() > 0;
+ else
+ enable = !theClipboard().get().empty();
+ } else if (isStrUnsignedInt(to_utf8(cmd.argument()))) {
+ int n = convert<unsigned int>(to_utf8(cmd.argument()));
+ enable = cap::numberOfSelections() > n;
+ } else
+ // unknown argument
+ enable = false;
+#endif
break;
case LFUN_PARAGRAPH_MOVE_UP: