]> 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 2d38105854b7665a28714b545a3c6c3f2a420d57..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;
@@ -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);
@@ -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())
@@ -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: {