X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.cpp;h=7cb99cdf4d9cb298a2d34370e71057e14c5320ab;hb=51cc1a1cbed395ab79ffa98765231efac4112c56;hp=9d42f3d64c2c948885335c2027777364e9f48319;hpb=9c55af4a223ce4db29d643251109e245665344bd;p=lyx.git diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 9d42f3d64c..7cb99cdf4d 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -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_;