]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Do not modify the changed() status of rows when no drawing has taken place
[lyx.git] / src / BufferView.cpp
index 9d42f3d64c2c948885335c2027777364e9f48319..7cb99cdf4d9cb298a2d34370e71057e14c5320ab 100644 (file)
@@ -1251,7 +1251,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
 
        case LFUN_BUFFER_PARAMS_APPLY: {
                DocumentClassConstPtr olddc = buffer_.params().documentClassPtr();
-               cur.recordUndoFullDocument();
+               cur.recordUndoBufferParams();
                istringstream ss(to_utf8(cmd.argument()));
                Lexer lex;
                lex.setStream(ss);
@@ -1272,7 +1272,10 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
        }
 
        case LFUN_LAYOUT_MODULES_CLEAR: {
-               cur.recordUndoFullDocument();
+               // FIXME: this modifies the document in cap::switchBetweenClasses
+               //  without calling recordUndo. Fix this before using
+               //  recordUndoBufferParams().
+               cur.recordUndoFullBuffer();
                buffer_.params().clearLayoutModules();
                makeDocumentClass();
                dr.screenUpdate(Update::Force);
@@ -1288,7 +1291,10 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                                "conflicts with installed modules.");
                        break;
                }
-               cur.recordUndoFullDocument();
+               // FIXME: this modifies the document in cap::switchBetweenClasses
+               //  without calling recordUndo. Fix this before using
+               //  recordUndoBufferParams().
+               cur.recordUndoFullBuffer();
                buffer_.params().addLayoutModule(argument);
                makeDocumentClass();
                dr.screenUpdate(Update::Force);
@@ -1317,7 +1323,10 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        break;
 
                // Save the old, possibly modular, layout for use in conversion.
-               cur.recordUndoFullDocument();
+               // FIXME: this modifies the document in cap::switchBetweenClasses
+               //  without calling recordUndo. Fix this before using
+               //  recordUndoBufferParams().
+               cur.recordUndoFullBuffer();
                buffer_.params().setBaseClass(argument);
                makeDocumentClass();
                dr.screenUpdate(Update::Force);
@@ -2028,7 +2037,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                if (!newL || oldL == newL)
                        break;
                if (oldL->rightToLeft() == newL->rightToLeft()) {
-                       cur.recordUndoFullDocument();
+                       cur.recordUndoFullBuffer();
                        buffer_.changeLanguage(oldL, newL);
                        cur.setCurrentFont();
                        dr.forceBufferUpdate();
@@ -2961,6 +2970,19 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
        // Set the row on which the cursor lives.
        setCurrentRowSlice(rowSlice);
 
+       /** FIXME: the code below adds an extraneous computation of inset
+        * positions, and can therefore be bad for performance (think for
+        * example about a very large tabular inset. Redawing the row
+        * where it is means redrawing the whole screen).
+        *
+        * The bug that this fixes is the following: assume that there is
+        * a very large math inset. Upon entering the inset, when pressing
+        * `End', the row is not scrolled and the cursor is not visible. I
+        * am not sure why the extra row computation fixes the problem,
+        * actually.
+        *
+        * A proper fix should be found and this code should be removed.
+        */
        // Force the recomputation of inset positions
        bool const drawing = pi.pain.isDrawingEnabled();
        pi.pain.setDrawingEnabled(false);
@@ -2969,6 +2991,7 @@ void BufferView::checkCursorScrollOffset(PainterInfo & pi)
                      -d->horiz_scroll_offset_, 0);
        rp.paintText();
        pi.pain.setDrawingEnabled(drawing);
+       /** END of bad code */
 
        // Current x position of the cursor in pixels
        int const cur_x = getPos(d->cursor_).x_;