mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-02 14:01:10 +00:00
Let LFUN_PASTE always paste the most recent clipboard (internal or system)
* src/insets/insettabular.C (InsetTabular::doDispatch): Only paste the tabular clipboard if the system clipboard is not newer, else let the current cell paste the system clipboard (InsetTabular::getStatus): Only decide whether to enable LFUN_PASTE if the tabular clipboard is not empty and the system clipboard is not newer, else let the current cell decide. * src/mathed/InsetMathGrid.C (InsetMathGrid::doDispatch): Use the system clipboard for LFUN_PASTE if it is newer. * src/mathed/InsetMathNest.C (InsetMathNest::doDispatch): Use the system clipboard for LFUN_PASTE if it is newer. * src/text3.C (doInsertInset): Add a "0" argument to LFUN_PASTE, because we always want to use the internal clipboard here (LyXText::dispatch): ditto (when handling mouse button 2 press) (LyXText::dispatch): Use the system clipboard for LFUN_PASTE if it is newer. (LyXText::getStatus): Also enable LFUN_PASTE if the system clipboard is owned by another application git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@16498 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
9d1dbb6f61
commit
8f2243819a
@ -723,7 +723,7 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case LFUN_PASTE:
|
case LFUN_PASTE:
|
||||||
if (tabularStackDirty()) {
|
if (tabularStackDirty() && theClipboard().isInternal()) {
|
||||||
recordUndoInset(cur, Undo::INSERT);
|
recordUndoInset(cur, Undo::INSERT);
|
||||||
pasteSelection(cur);
|
pasteSelection(cur);
|
||||||
break;
|
break;
|
||||||
@ -1033,7 +1033,7 @@ bool InsetTabular::getStatus(LCursor & cur, FuncRequest const & cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
case LFUN_PASTE:
|
case LFUN_PASTE:
|
||||||
if (tabularStackDirty()) {
|
if (tabularStackDirty() && theClipboard().isInternal()) {
|
||||||
status.enabled(true);
|
status.enabled(true);
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
#include "undo.h"
|
#include "undo.h"
|
||||||
|
|
||||||
|
#include "frontends/Clipboard.h"
|
||||||
#include "frontends/Painter.h"
|
#include "frontends/Painter.h"
|
||||||
|
|
||||||
#include "insets/mailinset.h"
|
#include "insets/mailinset.h"
|
||||||
@ -1210,11 +1211,19 @@ void InsetMathGrid::doDispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
case LFUN_PASTE: {
|
case LFUN_PASTE: {
|
||||||
cur.message(_("Paste"));
|
cur.message(_("Paste"));
|
||||||
cap::replaceSelection(cur);
|
cap::replaceSelection(cur);
|
||||||
istringstream is(to_utf8(cmd.argument()));
|
docstring topaste;
|
||||||
|
if (cmd.argument().empty() && !theClipboard().isInternal())
|
||||||
|
topaste = theClipboard().get();
|
||||||
|
else {
|
||||||
|
idocstringstream is(cmd.argument());
|
||||||
int n = 0;
|
int n = 0;
|
||||||
is >> n;
|
is >> n;
|
||||||
|
topaste = cap::getSelection(cur.buffer(), n);
|
||||||
|
}
|
||||||
InsetMathGrid grid(1, 1);
|
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) {
|
if (grid.nargs() == 1) {
|
||||||
// single cell/part of cell
|
// single cell/part of cell
|
||||||
recordUndo(cur);
|
recordUndo(cur);
|
||||||
|
@ -50,6 +50,7 @@
|
|||||||
|
|
||||||
#include "support/lstrings.h"
|
#include "support/lstrings.h"
|
||||||
|
|
||||||
|
#include "frontends/Clipboard.h"
|
||||||
#include "frontends/Painter.h"
|
#include "frontends/Painter.h"
|
||||||
#include "frontends/Selection.h"
|
#include "frontends/Selection.h"
|
||||||
|
|
||||||
@ -437,11 +438,16 @@ void InsetMathNest::doDispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
recordUndo(cur);
|
recordUndo(cur);
|
||||||
cur.message(_("Paste"));
|
cur.message(_("Paste"));
|
||||||
replaceSelection(cur);
|
replaceSelection(cur);
|
||||||
|
docstring topaste;
|
||||||
|
if (cmd.argument().empty() && !theClipboard().isInternal())
|
||||||
|
topaste = theClipboard().get();
|
||||||
|
else {
|
||||||
size_t n = 0;
|
size_t n = 0;
|
||||||
istringstream is(to_utf8(cmd.argument()));
|
idocstringstream is(cmd.argument());
|
||||||
is >> n;
|
is >> n;
|
||||||
docstring const selection = cap::getSelection(cur.buffer(), n);
|
topaste = cap::getSelection(cur.buffer(), n);
|
||||||
cur.niceInsert(selection);
|
}
|
||||||
|
cur.niceInsert(topaste);
|
||||||
cur.clearSelection(); // bug 393
|
cur.clearSelection(); // bug 393
|
||||||
cur.bv().switchKeyMap();
|
cur.bv().switchKeyMap();
|
||||||
finishUndo();
|
finishUndo();
|
||||||
|
31
src/text3.C
31
src/text3.C
@ -267,7 +267,7 @@ bool doInsertInset(LCursor & cur, LyXText * text,
|
|||||||
inset->edit(cur, true);
|
inset->edit(cur, true);
|
||||||
|
|
||||||
if (gotsel && pastesel) {
|
if (gotsel && pastesel) {
|
||||||
lyx::dispatch(FuncRequest(LFUN_PASTE));
|
lyx::dispatch(FuncRequest(LFUN_PASTE, "0"));
|
||||||
// reset first par to default
|
// reset first par to default
|
||||||
if (cur.lastpit() != 0 || cur.lastpos() != 0) {
|
if (cur.lastpit() != 0 || cur.lastpos() != 0) {
|
||||||
LyXLayout_ptr const layout =
|
LyXLayout_ptr const layout =
|
||||||
@ -756,13 +756,16 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
case LFUN_PASTE:
|
case LFUN_PASTE:
|
||||||
cur.message(_("Paste"));
|
cur.message(_("Paste"));
|
||||||
cap::replaceSelection(cur);
|
cap::replaceSelection(cur);
|
||||||
if (isStrUnsignedInt(to_utf8(cmd.argument())))
|
if (cmd.argument().empty() && !theClipboard().isInternal())
|
||||||
pasteSelection(cur, bv->buffer()->errorList("Paste"),
|
pasteString(cur, theClipboard().get(), docstring());
|
||||||
convert<unsigned int>(to_utf8(cmd.argument())));
|
else {
|
||||||
else
|
string const arg(to_utf8(cmd.argument()));
|
||||||
pasteSelection(cur, bv->buffer()->errorList("Paste"),
|
pasteSelection(cur, bv->buffer()->errorList("Paste"),
|
||||||
|
isStrUnsignedInt(arg) ?
|
||||||
|
convert<unsigned int>(arg) :
|
||||||
0);
|
0);
|
||||||
bv->buffer()->errors("Paste");
|
bv->buffer()->errors("Paste");
|
||||||
|
}
|
||||||
cur.clearSelection(); // bug 393
|
cur.clearSelection(); // bug 393
|
||||||
bv->switchKeyMap();
|
bv->switchKeyMap();
|
||||||
finishUndo();
|
finishUndo();
|
||||||
@ -968,7 +971,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
|
|||||||
// insert this
|
// insert this
|
||||||
if (cmd.button() == mouse_button::button2) {
|
if (cmd.button() == mouse_button::button2) {
|
||||||
if (paste_internally)
|
if (paste_internally)
|
||||||
lyx::dispatch(FuncRequest(LFUN_PASTE));
|
lyx::dispatch(FuncRequest(LFUN_PASTE, "0"));
|
||||||
else
|
else
|
||||||
lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
|
lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
|
||||||
}
|
}
|
||||||
@ -1721,7 +1724,23 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case LFUN_PASTE:
|
case LFUN_PASTE:
|
||||||
|
// 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;
|
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;
|
break;
|
||||||
|
|
||||||
case LFUN_PARAGRAPH_MOVE_UP:
|
case LFUN_PARAGRAPH_MOVE_UP:
|
||||||
|
Loading…
Reference in New Issue
Block a user