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:
Georg Baum 2007-01-04 12:05:24 +00:00
parent 9d1dbb6f61
commit 8f2243819a
4 changed files with 54 additions and 20 deletions

View File

@ -723,7 +723,7 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
}
case LFUN_PASTE:
if (tabularStackDirty()) {
if (tabularStackDirty() && theClipboard().isInternal()) {
recordUndoInset(cur, Undo::INSERT);
pasteSelection(cur);
break;
@ -1033,7 +1033,7 @@ bool InsetTabular::getStatus(LCursor & cur, FuncRequest const & cmd,
}
case LFUN_PASTE:
if (tabularStackDirty()) {
if (tabularStackDirty() && theClipboard().isInternal()) {
status.enabled(true);
return true;
} else

View File

@ -25,6 +25,7 @@
#include "gettext.h"
#include "undo.h"
#include "frontends/Clipboard.h"
#include "frontends/Painter.h"
#include "insets/mailinset.h"
@ -1210,11 +1211,19 @@ void InsetMathGrid::doDispatch(LCursor & cur, FuncRequest & cmd)
case LFUN_PASTE: {
cur.message(_("Paste"));
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;
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);

View File

@ -50,6 +50,7 @@
#include "support/lstrings.h"
#include "frontends/Clipboard.h"
#include "frontends/Painter.h"
#include "frontends/Selection.h"
@ -437,11 +438,16 @@ void InsetMathNest::doDispatch(LCursor & cur, FuncRequest & cmd)
recordUndo(cur);
cur.message(_("Paste"));
replaceSelection(cur);
docstring topaste;
if (cmd.argument().empty() && !theClipboard().isInternal())
topaste = theClipboard().get();
else {
size_t n = 0;
istringstream is(to_utf8(cmd.argument()));
idocstringstream is(cmd.argument());
is >> n;
docstring const selection = cap::getSelection(cur.buffer(), n);
cur.niceInsert(selection);
topaste = cap::getSelection(cur.buffer(), n);
}
cur.niceInsert(topaste);
cur.clearSelection(); // bug 393
cur.bv().switchKeyMap();
finishUndo();

View File

@ -267,7 +267,7 @@ bool doInsertInset(LCursor & cur, LyXText * text,
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 =
@ -756,13 +756,16 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
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"),
isStrUnsignedInt(arg) ?
convert<unsigned int>(arg) :
0);
bv->buffer()->errors("Paste");
}
cur.clearSelection(); // bug 393
bv->switchKeyMap();
finishUndo();
@ -968,7 +971,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
// 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"));
}
@ -1721,7 +1724,23 @@ bool LyXText::getStatus(LCursor & cur, FuncRequest const & cmd,
break;
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;
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: