]> git.lyx.org Git - lyx.git/blobdiff - src/insets/insettabular.C
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / insets / insettabular.C
index 521806dea635cb2ab6c62b3e5d8b7269df850c3e..202ac6fa44bb8495781e2a56dd4919f2a87029ff 100644 (file)
@@ -501,7 +501,17 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                }
 
                if (cmd.button() == mouse_button::button2) {
-                       cmd = FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph");
+                       if (bvcur.selection()) {
+                               // See comment in LyXText::dispatch why we
+                               // do this
+                               // FIXME This does not use paste_tabular,
+                               // another reason why paste_tabular should go.
+                               cap::copySelectionToStack(bvcur);
+                               cmd = FuncRequest(LFUN_PASTE, "0");
+                       } else {
+                               cmd = FuncRequest(LFUN_PRIMARY_SELECTION_PASTE,
+                                                 "paragraph");
+                       }
                        doDispatch(cur, cmd);
                }
                break;
@@ -547,6 +557,8 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                cell(cur.idx())->dispatch(cur, cmd);
                if (!cur.result().dispatched()) {
                        isRightToLeft(cur) ? movePrevCell(cur) : moveNextCell(cur);
+                       if (cmd.action == LFUN_CHAR_FORWARD_SELECT)
+                               theSelection().haveSelection(cur.selection());
                        if (sl == cur.top())
                                cmd = FuncRequest(LFUN_FINISHED_RIGHT);
                        else
@@ -559,6 +571,8 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                cell(cur.idx())->dispatch(cur, cmd);
                if (!cur.result().dispatched()) {
                        isRightToLeft(cur) ? moveNextCell(cur) : movePrevCell(cur);
+                       if (cmd.action == LFUN_CHAR_BACKWARD_SELECT)
+                               theSelection().haveSelection(cur.selection());
                        if (sl == cur.top())
                                cmd = FuncRequest(LFUN_FINISHED_LEFT);
                        else
@@ -580,6 +594,8 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                                TextMetrics const & tm =
                                        cur.bv().textMetrics(cell(cur.idx())->getText(0));
                                cur.pos() = tm.x2pos(cur.pit(), 0, cur.targetX());
+                               if (cmd.action == LFUN_DOWN_SELECT)
+                                       theSelection().haveSelection(cur.selection());
                        }
                if (sl == cur.top()) {
                        // we trick it to go to the RIGHT after leaving the
@@ -605,6 +621,8 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                                ParagraphMetrics const & pm =
                                        tm.parMetrics(cur.lastpit());
                                cur.pos() = tm.x2pos(cur.pit(), pm.rows().size()-1, cur.targetX());
+                               if (cmd.action == LFUN_UP_SELECT)
+                                       theSelection().haveSelection(cur.selection());
                        }
                if (sl == cur.top()) {
                        cmd = FuncRequest(LFUN_FINISHED_UP);
@@ -661,12 +679,12 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
                break;
 
        // insert file functions
-       case LFUN_FILE_INSERT_ASCII_PARA:
-       case LFUN_FILE_INSERT_ASCII: {
+       case LFUN_FILE_INSERT_PLAINTEXT_PARA:
+       case LFUN_FILE_INSERT_PLAINTEXT: {
                // FIXME UNICODE
-               string const tmpstr = getContentsOfAsciiFile(&cur.bv(), to_utf8(cmd.argument()), false);
+               string const tmpstr = getContentsOfPlaintextFile(&cur.bv(), to_utf8(cmd.argument()), false);
                // FIXME: We don't know the encoding of the file
-               if (!tmpstr.empty() && !insertAsciiString(cur.bv(), from_utf8(tmpstr), false))
+               if (!tmpstr.empty() && !insertPlaintextString(cur.bv(), from_utf8(tmpstr), false))
                        cur.undispatched();
                break;
        }
@@ -705,14 +723,14 @@ void InsetTabular::doDispatch(LCursor & cur, FuncRequest & cmd)
        case LFUN_CLIPBOARD_PASTE:
        case LFUN_PRIMARY_SELECTION_PASTE: {
                docstring const clip = (cmd.action == LFUN_CLIPBOARD_PASTE) ?
-                       theClipboard().get() :
+                       theClipboard().getAsText() :
                        theSelection().get();
                if (clip.empty())
                        break;
-               // pass to InsertAsciiString, but
+               // pass to InsertPlaintextString, but
                // only if we have multi-cell content
                if (clip.find_first_of(from_ascii("\t\n")) != docstring::npos) {
-                       if (insertAsciiString(cur.bv(), clip, false)) {
+                       if (insertPlaintextString(cur.bv(), clip, false)) {
                                // content has been replaced,
                                // so cursor might be invalid
                                cur.pos() = cur.lastpos();
@@ -1253,8 +1271,6 @@ void InsetTabular::resetPos(LCursor & cur) const
        }
 
        cur.updateFlags(Update::Force | Update::FitCursor);
-
-       InsetTabularMailer(*this).updateDialog(&bv);
 }
 
 
@@ -1742,8 +1758,6 @@ void InsetTabular::tabularFeatures(LCursor & cur,
        case LyXTabular::LAST_ACTION:
                break;
        }
-
-       InsetTabularMailer(*this).updateDialog(&bv);
 }
 
 
@@ -1796,10 +1810,13 @@ bool InsetTabular::copySelection(LCursor & cur)
        odocstringstream os;
        OutputParams const runparams;
        paste_tabular->plaintext(cur.buffer(), os, runparams, 0, true, '\t');
-       theClipboard().put(os.str());
+       // Needed for the "Edit->Paste recent" menu and the system clipboard.
+       cap::copySelection(cur, os.str());
+
        // mark tabular stack dirty
        // FIXME: this is a workaround for bug 1919. Should be removed for 1.5,
        // when we (hopefully) have a one-for-all paste mechanism.
+       // This must be called after cap::copySelection.
        dirtyTabularStack(true);
 
        return true;
@@ -1868,6 +1885,7 @@ void InsetTabular::cutSelection(LCursor & cur)
        if (cur.pos() > cur.lastpos())
                cur.pos() = cur.lastpos();
        cur.clearSelection();
+       theSelection().haveSelection(false);
 }
 
 
@@ -1935,7 +1953,7 @@ bool InsetTabular::forceDefaultParagraphs(idx_type cell) const
 }
 
 
-bool InsetTabular::insertAsciiString(BufferView & bv, docstring const & buf,
+bool InsetTabular::insertPlaintextString(BufferView & bv, docstring const & buf,
                                     bool usePaste)
 {
        if (buf.length() <= 0)