]> git.lyx.org Git - features.git/commitdiff
Let LFUN_PASTE always paste the most recent clipboard (internal or system)
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Thu, 4 Jan 2007 12:05:24 +0000 (12:05 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Thu, 4 Jan 2007 12:05:24 +0000 (12:05 +0000)
* 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

src/insets/insettabular.C
src/mathed/InsetMathGrid.C
src/mathed/InsetMathNest.C
src/text3.C

index 43f3c4ff071e6f93f5d3aa0d2d6de0d2a09198e2..9f9ef92e30f16a644460fb9daf0245ec1466a952 100644 (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
index bf987daf33057274c12d595401355d6715fd7cc2..86ba646d8aba586a898b53b76d83e0fed1fa742c 100644 (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()));
-               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);
index 8ba34894744f4f993d053232c93e46db75af2bd1..90f8fffe20ae331871b999884740a7b539b514c8 100644 (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);
-               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();
index f8d42d02d14578db9bf4ef4042f670664e83bf86..3afcfbfd30ca9fad0af9f0307d2c36d0e474023c 100644 (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"),
-                       0);
-               bv->buffer()->errors("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:
-               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: