]> git.lyx.org Git - lyx.git/blobdiff - src/text3.C
Fix bug 2485 and crash on middle mouse paste on math
[lyx.git] / src / text3.C
index f34b24ab10557bd252a2c50804a54a987362078d..fadfb888f581d3f96d65f0c6b273c430529dae69 100644 (file)
@@ -81,6 +81,7 @@ using lyx::support::token;
 using std::endl;
 using std::string;
 using std::istringstream;
+using std::ostringstream;
 
 
 extern string current_layout;
@@ -153,7 +154,7 @@ namespace {
                        // is empty
                        if (!cmd.argument.empty())
                                cur.dispatch(FuncRequest(LFUN_INSERT_MATH,
-                                                        cmd.argument));
+                                                        cmd.argument));
                } else {
                        // create a macro if we see "\\newcommand"
                        // somewhere, and an ordinary formula
@@ -313,7 +314,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
        bool singleParUpdate = lyxaction.funcHasFlag(cmd.action,
                LyXAction::SingleParUpdate);
        // Signals that a full-screen update is required
-       bool needsUpdate = !(lyxaction.funcHasFlag(cmd.action, 
+       bool needsUpdate = !(lyxaction.funcHasFlag(cmd.action,
                LyXAction::NoUpdate) || singleParUpdate);
        // Remember the old paragraph metric (_outer_ paragraph!)
        Dimension olddim = cur.bottom().paragraph().dim();
@@ -631,7 +632,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                        if (cur.pos() == cur.paragraph().size())
                                // Par boundary, force full-screen update
                                singleParUpdate = false;
-                       needsUpdate = Delete(cur);
+                       needsUpdate = erase(cur);
                        cur.resetAnchor();
                        // It is possible to make it a lot faster still
                        // just comment out the line below...
@@ -649,7 +650,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                                cursorRight(cur);
                                cursorLeft(cur);
                        }
-                       Delete(cur);
+                       erase(cur);
                        cur.resetAnchor();
                } else {
                        cutSelection(cur, true, false);
@@ -861,7 +862,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
 
        case LFUN_GETXY:
                cur.message(convert<string>(cursorX(cur.top(), cur.boundary())) + ' '
-                         + convert<string>(cursorY(cur.top(), cur.boundary())));
+                         + convert<string>(cursorY(cur.top(), cur.boundary())));
                break;
 
        case LFUN_SETXY: {
@@ -965,7 +966,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                lyx::cap::replaceSelection(cur);
                Paragraph & par = cur.paragraph();
                lyx::pos_type pos = cur.pos();
-               char c;
+               lyx::char_type c;
                if (pos == 0)
                        c = ' ';
                else if (cur.prevInset() && cur.prevInset()->isSpace())
@@ -994,7 +995,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                break;
        }
 
-       case LFUN_DATE_INSERT: 
+       case LFUN_DATE_INSERT:
                if (cmd.argument.empty())
                        bv->owner()->dispatch(FuncRequest(LFUN_SELFINSERT,
                                lyx::formatted_time(lyx::current_time())));
@@ -1107,6 +1108,21 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                bv->switchKeyMap();
                bv->owner()->updateMenubar();
                bv->owner()->updateToolbars();
+
+               // if view-source dialog is visible, send source code of selected
+               // text to the dialog
+               if (cmd.button() == mouse_button::button1 && cur.selection() 
+                       && bv->owner()->getDialogs().visible("view-source")) {
+                       // get *top* level paragraphs that contain the selection
+                       lyx::pit_type par_begin = bv->cursor().selectionBegin().bottom().pit();
+                       lyx::pit_type par_end = bv->cursor().selectionEnd().bottom().pit();
+                       if (par_begin > par_end)
+                               std::swap(par_begin, par_end);
+                       ostringstream ostr;
+                       bv->buffer()->getSourceCode(ostr, par_begin, par_end + 1);
+                       // display the dialog and show source code
+                       bv->owner()->getDialogs().update("view-source", ostr.str());
+               }
                break;
        }
 
@@ -1133,7 +1149,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                string::const_iterator end = cmd.argument.end();
                for (; cit != end; ++cit)
                        bv->owner()->getIntl().getTransManager().
-                               TranslateAndInsert(*cit, this);
+                               translateAndInsert(*cit, this);
 
                cur.resetAnchor();
                moveCursor(cur, false);
@@ -1441,7 +1457,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                bv->owner()->getLyXFunc().handleKeyFunc(cmd.action);
                if (!cmd.argument.empty())
                        bv->owner()->getIntl().getTransManager()
-                               .TranslateAndInsert(cmd.argument[0], this);
+                               .translateAndInsert(cmd.argument[0], this);
                break;
 
        case LFUN_FLOAT_LIST: {
@@ -1530,9 +1546,9 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
                break;
 
        default:
-               lyxerr[Debug::ACTION] 
+               lyxerr[Debug::ACTION]
                        << BOOST_CURRENT_FUNCTION
-                       << ": Command " << cmd 
+                       << ": Command " << cmd
                        << " not DISPATCHED by LyXText" << endl;
                cur.undispatched();
                break;
@@ -1540,7 +1556,7 @@ void LyXText::dispatch(LCursor & cur, FuncRequest & cmd)
 
        if (singleParUpdate)
                // Inserting characters does not change par height
-               if (cur.bottom().paragraph().dim().height() 
+               if (cur.bottom().paragraph().dim().height()
                    == olddim.height()) {
                        // if so, update _only_ this paragraph
                        cur.bv().update(Update::SinglePar |